c++ - 将函数作为模板参数传递

标签 c++ c++11 c++14

我正在尝试将函数作为参数传递给模板类 - 目的是这样我就可以将任何函数作为参数传递并实现不同的功能:

int A() 
{ 
return 0; 
}

void Test() {
    auto B2 = B<int(*A)()>(&A);
}

int main()
{
Test();
}

但是我遇到了编译问题:

$ c++ -std=c++14 try.cpp
try.cpp: In function 'void Test()':
error: cast from 'int (*)()' to 'int' loses precision [-fpermissive]
     auto B2 = B<int(*A)()>(&A);
                       ^                       ^

如何使用任何返回类型的函数实例化类 B 并接受任何参数并解析编译?

最佳答案

您应该在 auto B2 = ... 行的模板参数中删除函数名称 A,使其看起来像这样:

auto B2 = B<int(*)()>(A);

名称不是类型说明符的一部分,类型是编译器在尝试实例化类模板时唯一寻找的东西。您可以使用此代码段来引用函数的名称并让编译器推断其类型:

auto B2 = B<decltype(&A)>(A);

请注意,在将 A 传递给 B 的构造函数时,您可以选择将 & 放在 A 之前(不适用于 >decltype(&A) 虽然),因为它被隐式转换为函数指针。

关于c++ - 将函数作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318898/

相关文章:

c++ - std::is_convertible 与 std::function 不一致

c++ - 如何将线程放入 C++ 智能指针中?

c++ - 如何在 hpp 中声明一个 vector ?

java - GCC 和 JVM 自动并行批处理

c++ - `=` 中的 ` C c = C(args);` 是否调用复制构造函数?

c++ - "doesn' t synthesize"和 "defined as deleted"有什么区别?

c++ - 在运行时生成可变参数列表

c++ - 从另一个类设置只读属性

c++ - 余弦/正弦矩阵数学

c++ - C++11 中返回 const 值类型对 move 语义的影响