Я создал простой класс 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;
}
Typedefs не могут быть шаблонами.
В С++ 11 используйте псевдонимы
template <typename T>
using callback = void (*)(T);
В С++ 03 поместите его внутри структуры
template <typename T>
struct SortCallback {
typedef void (*)(T) type;
};
typename SortCallback<int>::type callback;
using
чтобы включить это.