C++のdecay

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

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

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

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

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

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

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

std::decay

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)