从模板参数中声明模板化 class 中的函数指针
declare function pointer in templated class from template arguments
我正在尝试从函数原型的模板参数声明函数指针
template <typename ReturnType, typename... Args> class DllFunction {
public:
ReturnType (*fptr_)(Args...);
};
DllFunction<int(int)> f;
但我收到此错误:
error: C2091: function returns function
你混合了两种不同的方式。
或者您声明 DllFunction
接收 return 和参数类型的可变参数列表
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;
我正在尝试从函数原型的模板参数声明函数指针
template <typename ReturnType, typename... Args> class DllFunction {
public:
ReturnType (*fptr_)(Args...);
};
DllFunction<int(int)> f;
但我收到此错误:
error: C2091: function returns function
你混合了两种不同的方式。
或者您声明 DllFunction
接收 return 和参数类型的可变参数列表
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;