我正在尝试从函数原型(prototype)的模板参数声明函数指针
template <typename ReturnType, typename... Args> class DllFunction {
public:
ReturnType (*fptr_)(Args...);
};
DllFunction<int(int)> f;
但是我得到这个错误:
最佳答案
您正在混合两种不同的方式。
或者,您声明DllFunction
接收返回值和参数类型的可变列表
template <typename ReturnType, typename... Args> class DllFunction {
public:
ReturnType (*fptr_)(Args...);
};
但您必须避免使用
int(int)
形式来调用它,而必须使用// .........VVV return type
DllFunction<int, int> f;
// ..............^^^ arguments types
或者您使用
ReturnType(Args...)
形式调用,并且必须声明一个DllFunction
对象,如下所示template <typename>
class DllFunction;
template <typename ReturnType, typename... Args>
class DllFunction<ReturnType(Args...)> {
public:
ReturnType (*fptr_)(Args...);
};
您也可以使用指针函数形式
template <typename>
class DllFunction;
template <typename ReturnType, typename... Args>
class DllFunction<ReturnType(*)(Args...)> {
public:
ReturnType (*fptr_)(Args...);
};
因此您可以使用
decltype()
作为模板类型int foo (int);
DllFunction<decltype(&foo)> f;