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