Рассмотрим следующую функцию шаблона, которая имеет единственный параметр шаблона:
typedef void (func_t)();
void defaultF() {}
template <func_t F = defaultF>
void foo() {
F();
}
Теперь в пределах foo()
Я хочу определить, является ли F аргументом по умолчанию defaultF
.
Выполнение прямого сравнения адресов 1 :
template <func_t F = defaultF>
void foo() {
if (F == defaultF) {
cout << "DefaultF";
} else {
cout << "Something else...";
}
cout << endl;
}
Кажется, что работает на компиляторах, на которых я его пробовал, но гарантированно будет верным методом?
1 По крайней мере, я предполагаю, что это эквивалентно сравнению адреса функции: на самом деле я не смог написать &F
, но, по-моему, он все равно затухает.