C++ヘッダーファイルには、次のコードが表示されます。
typedef typename _Mybase::value_type value_type;
さて、私が理解しているように、Schildtによる"C++ the Complete Reference"から引用しています。 typename
はキーワードクラスで置き換えることができます。typename
の2番目の使用法は、テンプレート宣言で使用される名前がオブジェクト名ではなく型名であることをコンパイラに通知することです。
同様に、キーワードtypedef
を使用して、新しいデータ型名を定義できます。実際に新しいデータ型を作成するのではなく、既存の型の新しい名前を定義しています。
ただし、typedef
とtypename
を組み合わせた上記のコード行の意味を正確に説明できますか。そして、ステートメントの「::
」は何を意味していますか?
typedefは、短縮形のように、コードで使用する新しい型を定義しています。
typedef typename _MyBase::value_type value_type;
value_type v;
//use v
ここでtypenameは、value_type
が_MyBase
内のオブジェクトではなく型であることをコンパイラーに知らせています。
::
はタイプのスコープです。 「ある」というようなものなので、value_type
"ある" _MyBase
です。または含まれていると考えることもできます。
typename
は_Mybase::value_type
はタイプの名前であるため、typedef
はその事実を信頼できます。