1

私はここにこの非常に複雑な例を持っています:

auto someClassFactory(const Arg1& arg1, const Arg2& arg2, const Arg3)
{
    auto lambda = [arg1](const SomeArg& a) {
        // 10 or so line lambda...
        // ...
        // ...
    };

    return SomeClass<decltype(lambda)>{arg2, arg3, lambda};
}

さまざまなファンクターで SomeClass を構築するための同様のファクトリ関数がたくさんあります。

末尾の戻り値の型を指定せずに上記の手法を使用すると、 gcc 4.8で-std=c++1yを指定してコンパイルするだけでうまく機能しますが、私はまだc++1yの機能を使用することに熱心ではありません。末尾の戻り値の型のコードの複製。decltype

戻り値の型で使用するラムダを推測するための他のオプションは何ですか?

std::functionの使用を検討しましたが、この場合は使用を避けたいと思います。

4

2 に答える 2

2

lambda を明示的なファンクターに置き換えます。

make_classまたは、ラムダを完全に転送し、その型をコンストラクターに推測する関数を作成しますsome_class。RVO を使用してコピーを削除するか{direct construction}、戻り値を明示的に構築するために使用します。RETURNSマクロも使用できます。

#define RETURNS(x) ->decltype(x) { return (x); }

…考えてみると、評価されていないコンテキストでラムダを取得するため、これは機能しません。

于 2013-10-02T04:08:11.787 に答える