5

std::functionテンプレート引数で定義された型のコンストラクターでを構築することは可能ですか?

例えば:

template <typename T>
bool registerType()
{
    const std::function<T()> func = &T::T; //I know this doesn't work
    //...
}
4

1 に答える 1

10

コンストラクターには名前がないため、コンストラクターへのポインター/参照を取得することはできません。また、一般に、コンストラクターは関数のように動作しません。

ラムダを使用しstd::functionて、同じシグニチャでを初期化できます。

const std::function<T()> func = [](void) { return T(); } // or something like that

T()これを呼び出すと、式を使用して型の一時を作成するのと同じ結果が得られますTが、副作用が異なる可能性があります。真の関数呼び出しの場合、returnステートメントに余分な一時的なものがあり、名目上は戻り値にコピー/移動されます。実装は、余分な一時的なものを排除する場合としない場合があります。

于 2012-09-12T11:07:30.627 に答える