ошибка шаблона - не может быть определением шаблона

0

Я создал простой класс LinkedList, используя шаблоны в C++

В принципе, я могу создать экземпляр моего списка, подобного этому

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;

}
  • 0
    На какую версию стандарта C ++ вы полагаетесь? До C ++ 11 не было шаблонов typedef. Даже в C ++ 11 добавлены объявления псевдонимов с using чтобы включить это.
Теги:
templates
linked-list

1 ответ

0

Typedefs не могут быть шаблонами.

В С++ 11 используйте псевдонимы

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

В С++ 03 поместите его внутри структуры

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню