0

これは、ISO C++ 標準 14.6/6 のステートメントです。

クラス テンプレートの定義内またはクラス テンプレートのメンバーの定義内でtypename、型を宣言するクラス テンプレートの以前に宣言されたメンバーの非修飾名を参照する場合、キーワードは必要ありません。typename修飾子が単にクラス テンプレート名であっても、修飾名を使用してメンバーが参照される場合、キーワードは常に指定されます。【例:

template<class T> struct A {
    typedef int B;
    A::B b;             // ill-formed: typename required before A::B
    void f(A<T>::B);    // ill-formed: typename required before A<T>::B
    typename A::B g();  // OK
};

キーワード typename は、修飾名がA、またはパラメーター list を持つクラス テンプレート内のシノニムであるA<T>ためにA必要です。]A<T><T>

このステートメントは継承中に当てはまりますか?

はいの場合、誰かがこれを説明できますか?

内部クラスに確認しました。それは受け入れられますか?しかし、継承で確認できませんか?

4

1 に答える 1

1

はい、それは継承されたメンバーにも同様に当てはまります。

基本テンプレートtypenameのメンバーにはキーワードが必要ですが、一般に基本クラスには必要ありません。基本テンプレートに必要な理由は、そのメンバーがブロックのスコープに自動的に取り込まれないためです。そのため、それらを参照する唯一の方法は修飾 ID を使用することであり、これには.class {}typename

template< typename >
class base1
    { typedef int type1; };

class base2 
    { typedef int type2; };

template< typename A >
class derived
    : base1< A >, base2 {
    typename base1< A >::type1 x;
    type2 y;
};
于 2010-09-17T06:06:51.677 に答える