我正在尝试使用带有默认参数的函数作为函数指针模板参数:
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: 错误:无法将模板参数“foo1”转换为“void (*)()”
是否有特定的语法可以使其工作?或者特定的语言限制?否则,另一种方法是使用两个单独的函数而不是默认参数:
void foo1(int a) {}
void foo1() { foo1(0); }
Update我知道签名是不同的,但我想知道是否有一种方法可以方便地完成这项工作,而不需要用默认参数修改所有函数?
的签名foo1
is void(int)
, not void()
。这就是为什么它不能转换为void(*)()
.
您将默认参数与重载混淆了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)