クラスのメンバーの型を参照するために他の場所で使用できる型名をテンプレート化されたクラスで定義したいと考えています。
template <class T>
class CA
{
public:
//typedef typename T::iterator iterator_type;
typedef typename T ElementType1; // compile error on this line
//typedef T ElementType2;
T m_element;
};
次のように使用します。
template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
//...
};
次のようなオブジェクトを宣言します。
typedef CDerived<CA> MyNewClass;
これは不可能ですか?次の行を使用する Xcode ではなく、VS2010 では正しくコンパイルされるコードがいくつかあります。
typedef typename T ElementType1;
どうやらコンパイラは typename の後に修飾名を期待しているようですが、テンプレート型に修飾名を付ける方法がわかりません。
このコンテキストでは、ElementType1 と ElementType2 の違いがわかりません。
スタック オーバーフローに関する多くの質問を見ましたが、ほとんどの場合、私の例では iterator_type のような種類の宣言のみを参照しているようです。