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::typeptr乗算と見られるので、構文としては正当なC++の式となってしまう(ただしこの例ではptr宣言されていないためコンパイルエラーになる)。そうならないように、曖昧性排除するために型名である場合はtypenameを先行させる仕様になっている

※この「typename」の解説は、「キーワード (C++)」の解説の一部です。
「typename」を含む「キーワード (C++)」の記事については、「キーワード (C++)」の概要を参照ください。