Обнаружение определенной функции, переданной параметру функции шаблона функции - PullRequest
0 голосов
/ 26 мая 2018

Рассмотрим следующую функцию шаблона, которая имеет единственный параметр шаблона:

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, но, по-моему, он все равно затухает.

1 Ответ

0 голосов
/ 26 мая 2018

Да, это сравнение указателя функции, и оно работает.Вы не можете написать &F, потому что параметр шаблона, как и обычный параметр функции, распадается на указатель , поэтому F уже является указателем (и значением).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...