我正在尝试使用带有默认参数的函数作为函数指针模板参数:
template <void (*F)()>
class A {};
void foo1(int a = 0) {}
void foo2() {}
int main()
{
//A<foo1> a1; <-- doesn't work
A<foo2> a2;
}
编译错误是:
main.cpp:7:7: error: could not convert template argument ‘foo1’ to ‘void (*)()’
是否有特定的语法可以让它工作?还是特定的语言限制?否则,替代方法是使用两个独立的函数而不是默认参数:
void foo1(int a) {}
void foo1() { foo1(0); }
更新 我知道签名是不同的,但我想知道是否有一种方法可以方便地完成这项工作而不需要修改所有带有默认参数的函数?
最佳答案
foo1
的签名是void(int)
,而不是void()
。这就是它不能转换为 void(*)()
的原因。
您将默认参数与重载混淆了。
关于c++ - 具有默认参数作为模板类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425618/