3

次のようなクラス定義がある状況があります。

template<class T>
class Alpha< Bravo<T> >
{
....
};

私は gnu g++ でコンパイルしていますが、コンパイラは Alpha は「テンプレートではありません」と不平を言っています。

Bravo が作成されたライブラリで使用されているのと同じ手法を見たことがありますが、Bravo はテンプレート化されたクラスです。何か不足していますか?Alpha を骨の髄まで取り除き、テストを行ったが、コンパイルは成功しなかった。また、ブラボーのライブラリでこれが機能しているのを見た場所からコードをコピーして貼り付けようとしましたが、同じことが成功せず、同じエラーが発生しました。

前もって感謝します。

4

2 に答える 2

6

あなたが持っているのは部分的なテンプレートの特殊化です。ただし、テンプレートの特殊化には、特殊化するためのプライマリテンプレートが必要であり、それはありません。

template<class T>
class Alpha;

template<class T>
class Alpha<Bravo<T> >
{
    // ...
};
于 2011-06-14T18:57:50.440 に答える
4

最初にプライマリテンプレートを宣言する必要があります。あなたが書いたのは専門分野です。

//primary template - the definition is optional
template<class T>
class Alpha
{
};

//specialization
template<class T>
class Alpha< Bravo<T> >
{
};
于 2011-06-14T18:57:55.280 に答える