C++のdecay

投稿者: | 2018/9/28 金曜日

C++のテンプレート関係は難しくて、もともとのC++との整合性もあって複雑になっている。std::decayは配列とポインタの関係を扱ってテンプレートをより汎用的にするためのもの。

前提知識、配列はコピーできない

前提知識、配列は配列で初期化できない

前提知識、ポインタならコピーできる

コピーできると言ってもポインタにアドレスをコピーしているだけ。

前提知識:関数もコピーできない

配列と同様に関数もコピーできないけど、関数へのポインタならコピーできる。

std::decay

こんな事があるので、テンプレートで型を汎用的に扱おうとすると一部の型でできなくなることがある。このできなくなる型の場合にできる型に変換してくれるのがstd::decay

“aaa”というリテラル文字列は型としてchar[4]なのでそのままだと初期化できない。そこでdecayを使ってこれをポインタ型に変えるとコピーできる。

生関数のままの型だとコピーできないのでエラーになるけどdecayを使って関数へのポインタに変換すればコピーできる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です