2014-02-20 38 views
0

我已創建使用模板的C++模板錯誤 - 不能是模板定義

一個簡單的LinkedList類基本上我可以創建列表的一個實例是這樣

LinkedList<int> myList = LinkedList<int>(); 

現在我想補充一個方法給我的LinkedList並提供一個回調函數,以便函數可以回調我的代碼來執行一個動作。

我試圖創建以下

template< typename T> 
typedef bool(*LinkedList_SortCallBack2)(T); 

但是我收到一個編譯器錯誤

錯誤C2998: '布爾(_ CDECL * _cdecl LinkedList_SortCallBack2)(T)':不能是模板定義

作爲解決方法我已經使用void *但有沒有辦法做我想要的?所以我的回電是這樣

bool cb(int NewValue, int ExistingValue) 
{ 
} 

代替

typedef bool (*LinkedList_SortCallBack)(void *value1, void* value2); 


bool cb(void* NewValue, void* ExistingValue) 
{ 
    int a, b; 

    a = *(int *)NewValue; 
    b = *(int*)ExistingValue; 
    if (a < b) 
      return true; 
    else 
      return false; 

} 
+0

你靠哪一個C++標準的版本里面?在C++ 11之前,沒有typedef模板。即使C++ 11使用'using'來添加別名聲明來啓用它。 – ftynse

回答

0

的typedef不能模板。

在C++ 11,使用別名

template <typename T> 
using callback = void (*)(T); 

在C++ 03,把它的結構

template <typename T> 
struct SortCallback { 
    typedef void (*)(T) type; 
}; 
typename SortCallback<int>::type callback;