正式には、typename は何のためにあるのですか? [重複] 質問する

正式には、typename は何のためにあるのですか? [重複] 質問する

時々、gccテンプレートの使用時に、まったく判読できないエラー メッセージが表示されることがあります... 具体的には、一見正しい宣言で非常に奇妙なコンパイル エラーが発生するという問題がありましたが、typename宣言の先頭にキーワードをプレフィックスすると、魔法のようにエラーが解消されました... (たとえば、先週、2 つの反復子を別のテンプレート クラスのメンバーとして宣言していたときに、これを実行する必要がありました)...

の話は何ですかtypename

ベストアンサー1

以下はジョスッティ氏の著書からの引用です。

このキーワードは、typename後続の識別子が型であることを指定するために導入されました。次の例を考えてみましょう。

template <class T>
Class MyClass
{
  typename T::SubType * ptr;
  ...
};

ここで、は が の型であるtypenameことを明確にするために使用されています。したがって、は 型へのポインタです。 がなければ、は静的メンバーと見なされます。したがって、SubTypeclass TptrT::SubTypetypenameSubType

T::SubType * ptr

SubTypeは、 型の値をTと乗算したものになりますptr

おすすめ記事