時々、gcc
テンプレートの使用時に、まったく判読できないエラー メッセージが表示されることがあります... 具体的には、一見正しい宣言で非常に奇妙なコンパイル エラーが発生するという問題がありましたが、typename
宣言の先頭にキーワードをプレフィックスすると、魔法のようにエラーが解消されました... (たとえば、先週、2 つの反復子を別のテンプレート クラスのメンバーとして宣言していたときに、これを実行する必要がありました)...
の話は何ですかtypename
?
ベストアンサー1
以下はジョスッティ氏の著書からの引用です。
このキーワードは、
typename
後続の識別子が型であることを指定するために導入されました。次の例を考えてみましょう。template <class T> Class MyClass { typename T::SubType * ptr; ... };
ここで、は が の型である
typename
ことを明確にするために使用されています。したがって、は 型へのポインタです。 がなければ、は静的メンバーと見なされます。したがって、SubType
class T
ptr
T::SubType
typename
SubType
T::SubType * ptr
SubType
は、 型の値をT
と乗算したものになりますptr
。