2014-10-17 90 views
5

我想用模板定義函數指針類型。然而,VS 2013我認爲'typedef模板是非法的'。 我想寫的東西是這樣的:錯誤C2823:typedef模板是非法的 - 函數指針

template<typename SD> 
typedef void(*FuncPtr)(void *object, SD *data); 

不幸的是,這並不編譯。我想保持這個簡短。基本上我需要爲一個函數指針定義一個類型,其參數是一個模板類。

+0

添加標記語言(如C++),使合適的人可以找到這個疑問句灰。 – CandiedOrange 2014-10-17 04:33:03

+0

完成,謝謝! – alias5000 2014-10-18 15:51:19

回答

7

由於C++ 11,您可以使用效果的using關鍵字非常喜歡的typedef,它允許模板:

template<typename SD> 
using FuncPtr = void (*)(void*, SD*); 

在此之前,你必須將模板從typedef的分離:

template<typename SD> 
struct FuncPtr 
{ 
    typedef void (*type)(void*, SD*); 
}; 

(和類型名稱是FuncPtr<U>::type,而不是隻FuncPtr<U>

+0

謝謝你的提示! – bvj 2016-07-20 07:02:33