检测传递给功能模板功能参数的特定功能

时间:2018-05-26 03:53:08

标签: c++ templates function-pointers

考虑以下具有单个模板参数的模板函数:

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 :(得分:2)

是的,这是一个函数指针比较,它确实有效。您不能编写&F,因为模板参数与常规函数参数decays to a pointer类似,因此F已经是指针(和prvalue)。