Я пытаюсь определить элемент шаблона внутри класса шаблона.
Вот фрагмент заголовочного файла:
template <typename Type>
class Queue
{
private:
// class scope definitions
// Node is a nested structure definition local to this class
struct Node {Type item; struct Node* next;};
enum {Q_SIZE = 10};
template <typename Type2> class DeepCopy // template member
{
public:
void docopy(Type2& d, const Type2& s);
};
...
Итак, элемент шаблона определен, но я хочу сделать явную специализацию для метода docopy, чтобы он глубже копировал, когда тип является указателем. Я помещу другой фрагмент из заголовочного файла с шаблоном метода и специализацией:
// template member
template <typename Type>
template <typename Type2>
void Queue<Type>::DeepCopy<Type2>::docopy(Type2& d, const Type2& s)
{
d = s;
}
// template member specialization for pointers
template <typename Type>
template <typename Type2>
void Queue<Type*>::DeepCopy<Type2*>::docopy(Type2* d, const Type2* s)
{
if (s)
d = new (*s);
else
d = 0;
}
Компилятор отправляет мне следующую ошибку: ожидаемый инициализатор до ‘<знак
Я не могу понять, что я делаю не так. Любая помощь?
Вы должны написать свою DeepCopy вне очереди в качестве шаблона верхнего уровня. Используйте только внутри своей очереди.
template <typename T>
class Queue {
DeepCopy<T> myCopy;
....
myCopy.doCopy(n.item, newItem);
Для вашего примера вы должны
Queue
класс для T*
,Queue<T*>
написать определение структуры DeepCopy
,Queue<T*>::DeepCopy
за U*
,Queue<T*>::DeepCopy<U*>::docopy
,