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 ответов

24 просмотра

используйте = 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 } первая перегрузка с двумя явными аргументами, чтобы не конфликтовала с перегрузкой с одним, ибо пак может быть пустым

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта