使用默认参数作为模板类型的函数

2023-12-31

我正在尝试使用带有默认参数的函数作为函数指针模板参数:

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(使用前将#替换为@)

使用默认参数作为模板类型的函数 的相关文章

随机推荐