从模板参数中声明功能指针中的模板类中

declare function pointer in templated class from template arguments

本文关键字:指针 声明 参数 功能      更新时间:2023-10-16

我正在尝试从函数原型的模板参数声明函数指针

template <typename ReturnType, typename... Args> class DllFunction {
public:
  ReturnType (*fptr_)(Args...);
};
DllFunction<int(int)> f;

但是我得到了这个错误:

错误:C2091:功能返回功能

您正在混合两种不同的方式。

或您声明DllFunction接收返回和参数类型的variadic列表

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;