темплейтый колбек, а внутри проверить - передали ли колбек?(т.е., разрешить вызывать эту функцию и БЕЗ колбека) т.е., какое-то значение по-умолчанию для темплейтного параметра
1) код > слова 2) не шаблонная функция, а шаблон функции
template<class CallbackT> void foo(CallbackT fun) { if (fun){ auto var = fun(): //some logic } else //another logic } std::string bar() {return "baar";} int main() { foo(); foo([] {return 0;}) foo(&bar); }
вот что-то такое
Дык сделай перегрузку без параметра
проще всего, я думаю: foo(CallbackT fun = nullptr) { if constexpr (std::is_same_v<CallbackT, std::nullptr_t>) { // } else { // } }
а если там тип лямбды выводдится, а не указать на функцию
Как ты это сделаешь интересно?
в моей конструкции выведется std::nullptr_t, а не функция/лямбда
ну когда я лямбду передаю, компилятор выводит какой-то уникальный тип. я разве могу его с nullptr сравнить?
ты сравниваешь не лямбду с nullptr, а тип с nullptr_t
'void foo(Callback)': could not deduce template argument for 'Callback'
точно.. template <class CallbackT = std::nullptr_t>
Обсуждают сегодня