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

Привет, вопрос по шаблонам, не могу сформулировать правильный запрос в

SO

Есть такой псевдокод:
int foo(int) { return 0; }
int foo(char) { return 0; }
double bar(double) { return 0.0; }

template<class T>
auto wrap(T t) {
if constexpr(std::is_save_v<T, int>) {
return foo(t);
} else if constexpr(std::is_save_v<T, char>) {
return foo(t);
} else if constexpr(std::is_save_v<T, double>) {
return bar(t);
} else {
...
}
}

Я не хочу в if constexpr дублировать все перегрузки для функции foo или bar, это глупо.
Как сделать вот такое:
template<class T>
auto wrap(T t) {
if constexpr( can_be_called(foo(t)) ) {
return foo(t);
} else if constexpr( can_be_called(bar(t)) ) {
return bar(t);
} else {
...
}
}

Что должно быть на месте can_be_called( )? std::is_constructable вроде не подходит

12 ответов

11 просмотров

Сфинайкой или концептом

Aidar Fattakhov
Сфинайкой или концептом

Только ты точно хочешь unqualified foo?

Alexander-Mironochev Автор вопроса
Aidar Fattakhov
Сфинайкой или концептом

через enable_if? готового хелпера в std нет? я оч не хотел писать структуры и шаблоны

Aidar Fattakhov
Можно не enable_if

decltype(foo(declval<T>()))*=nullptr псевдокод

https://en.cppreference.com/w/cpp/types/is_invocable

Artöm Bakri Al-Sarmini
https://en.cppreference.com/w/cpp/types/is_invocab...

Не то, тут тип нужен, а набор перегрузок не тип

Alexander Mironochev
через enable_if? готового хелпера в std нет? я оч ...

Хелпера нет, потому что ни в функцию, ни в шаблон нельзя передать идентификатор

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта