2014-02-20 36 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;