Я хочу определить класс шаблона с двумя аргументами шаблона:
- Тип указателя T*
- Указатель на функцию-член базового типа T
Кроме того, я хотел бы установить метод по умолчанию для аргумента функции.
// Do not allow SortedLinkedList<T>
template<typename T, bool (T::* comparisonMethod)(const T&) = &T::lessEqual>
class SortedLinkedList
{
private:
SortedLinkedList();
};
// Allow SortedLinkedList<T*>
template<typename T, bool (T::* comparisonMethod)(const T&)>
class SortedLinkedList<T*>
{
public:
void insert(T* item)
{
// do something with /item->*comparisonMethod)(...))
}
};
Этот код не компилируется, потому что g++ (4.4.3) не может вывести базовый тип T*
error: creating pointer to member function of non-class type ‘T*’
Есть ли способ вывести базовый тип уже в объявлении класса? decltype
недоступен в C++03, и я не знаю, будет ли он работать в этом месте.
Я нашел этот ответ, но он не помогает в этом кейс.
Спасибо