type nameとは何? わかりやすく解説 Weblio辞書 (original) (raw)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:51 UTC 版)
「キーワード (C++)」の記事における「typename」の解説
テンプレート引数で型を引数にとることを示すことに使う(classで代用可能)。 続く識別子が型名であることを示す。 //typenameの例template struct s1 //1の用法{ void f() { typename T::type *ptr; //2の用法 }}; 用法2.はなぜ存在するのかというと、曖昧性が生じさせないためである。 たとえばs1に次のようなクラスをテンプレート引数に渡すとする。 struct s2{ static const int type = 0;}; すると、仮にtypenameがなければs1::fの中の文はs2::type *ptr;となる。これはs2::typeとptrの乗算式と見られるので、構文としては正当なC++の式となってしまう(ただしこの例ではptrが宣言されていないためコンパイルエラーになる)。そうならないように、曖昧性を排除するために型名である場合はtypenameを先行させる仕様になっている。
※この「typename」の解説は、「キーワード (C++)」の解説の一部です。
「typename」を含む「キーワード (C++)」の記事については、「キーワード (C++)」の概要を参照ください。