从模板参数中声明模板化 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;