簡體   English   中英

從模板參數聲明模板化類中的函數指針

[英]declare function pointer in templated class from template arguments

我正在嘗試從函數原型的模板參數聲明函數指針

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

DllFunction<int(int)> f;

但是我得到這個錯誤:

錯誤:C2091:函數返回函數

您正在混合兩種不同的方式。

或者您聲明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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM