テンプレートクラス内にテンプレートメンバーを定義しようとしています。
ヘッダーファイルのフラグメントは次のとおりです。
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;
}
コンパイラは次のエラーを送信します:'<'トークンの前に初期化子が必要です。
何が間違っているのか理解できません。何か助けはありますか?