170 похожих чатов

Кто-Нибудь может мне обьяснить почему не выбирается специализированый метод в

этом коде ?
#include <string>

class Settings {
std::string fN;

Settings();

template<auto Settings::* mem, auto Settings::* ... mems>
void parse();

template<auto Settings::* mem>
void parse();
};

template<auto Settings::* mem, auto Settings::* ... mems>
void Settings::parse() {
parse<mem>();
parse<mems...>();
parse<mems>()...;
}

template<>
void Settings::parse<&Settings::fN>() {

}

template<auto Settings::* mem>
void Settings::parse() {
static_assert(!"Parse() not realized for this field");
}

Settings::Settings() {
parse<&Settings::fN>();
}

9 ответов

17 просмотров

используйте = delete, а не static_assert. второй умеет стрелять до инстанцирования

Zlolka-17 Автор вопроса
Ivan Sokolov
используйте = delete, а не static_assert. второй у...

Спасибо,но это не основная проблема )

Zlolka-17 Автор вопроса
Ivan Sokolov
используйте = delete, а не static_assert. второй у...

И если использовать delete специализация вообще не учавствует в перегрузке

Кажется, что рекурсия заменяется на фолд очень легко, и проблема исходная уйдет

Zlolka-17 Автор вопроса
Alexander Karaev
Кажется, что рекурсия заменяется на фолд очень лег...

Я бы рад, заменить на фолд, но что-то не могу придумать как должен выглядеть этот фолд

Zlolka 17
Я бы рад, заменить на фолд, но что-то не могу прид...

(parse<mems>(), ...);, где mems - один конкретный пак (не нужно отрезать у него хвост)

Zlolka-17 Автор вопроса
Alexander Karaev
(parse<mems>(), ...);, где mems - один конкретный ...

Благодарю. Я был близок к использованию comma operator , но я не додумался обернуть это выражение в скобки

Zlolka 17
Спасибо,но это не основная проблема )

У Вас как раз тот случай: bool(string-literal) всегда true, !true всегда false; неинстанцируемый шаблон, не могущий иметь валидных специализаций - недиагностируемая ошибка (IFNDR). fold там (parse<mems>(), ...); же просто.

Zlolka 17
Я бы рад, заменить на фолд, но что-то не могу прид...

у меня вот так работает struct Settings { std::string fN; template<auto Settings::* mem1, auto Settings::* mem2, auto Settings::*... rest> void parse() { parse<mem1>(); parse<mem2>(); (parse<rest>(), ...); } template<auto Settings::* mem> void parse() = delete; }; template<> void Settings::parse<&Settings::fN>() { static int i = 1; std::cout << i++ << ' '; } int main () { Settings{}.template parse<&Settings::fN, &Settings::fN, &Settings::fN>(); // 1 2 3 } первая перегрузка с двумя явными аргументами, чтобы не конфликтовала с перегрузкой с одним, ибо пак может быть пустым

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта