1. ホーム
  2. c++

[解決済み] ラムダ式を返す関数

2023-01-08 20:08:20

質問

C++11でラムダ関数を返す関数を書くことは可能でしょうか。 もちろん、そのような関数をどのように宣言するかが一つの問題です。ラムダはそれぞれ型を持っていますが、その型はC++では表現できません。これはうまくいかないと思う。

auto retFun() -> decltype ([](int x) -> int)
{
    return [](int x) { return x; }
}

これでもない。

int(int) retFun();

ラムダから、例えば関数へのポインタなどへの自動変換は知らないのですが。唯一の解決策は、関数オブジェクトを手作りして、それを返すことでしょうか?

どのように解決するのですか?

手作りの関数オブジェクトは必要なく、単に std::function のように、ラムダ関数が変換可能なものである必要があります。

この例では整数の恒等式関数を返しています。

std::function<int (int)> retFun() {
    return [](int x) { return x; };
}