模板错误 - 不能是模板定义

时间:2014-02-20 21:00:00

标签: c++ templates linked-list

我使用C ++中的模板创建了一个简单的LinkedList类

基本上我可以像这样创建我的列表实例

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

现在我想在我的LinkedList中添加一个方法并提供一个回调函数,以便函数可以回调我的代码来执行操作。

我尝试创建以下

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

但是我收到编译错误

错误C2998:'bool(_ 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;

}

1 个答案:

答案 0 :(得分: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;