c++ - 具有默认参数作为模板类型的函数

标签 c++ templates overloading

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

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/

相关文章:

c++ - 将打包任务插入容器导致VS2013出现C2280错误

c++ - Ncurses C++ 打印前景色/背景色交换的文本

C++抽象模板类

c++ - 编译器如何知道是否调用 const 重载?

c++ - 以编程方式从 Unix 中的用户名获取 UID 和 GID?

c++ - 我正在尝试创建一个使用C++中的参数包构造函数的异常类

c++ - 将可变参数模板参数解包到初始化列表中

c++ - 可选地支持模板的 initializer_list 构造可能包装容器

ruby-on-rails - Rails 模型中的字段 "overload"的最佳方法是什么?

clojure - 在 clojure 中覆盖代理中的多元方法