1

小さな再帰関数を回避するラッパー関数があるとします。ただし、ラッパーは、再帰関数を呼び出す前に、再帰関数が使用するオブジェクトを作成します。c++ でこれを行うにはどうすればよいですか? 独自のクラスにする必要がありますか?編集-クラスにできるかどうか、そこから取得する方法はわかっています-しかし、私の質問は、クラスが必要ですか、それともクラスを作成せずに逃げることができますか?

質問を明確にするために、一般的な例を作成しました。

void wrapper()
{
    Object myObject;
    bool recurFun(int x)
    {
        // do some stuff with myObject
        if (some condition){return recurFun(x-1)}
        else {return true}
    }
}

基本的な構文タイプのエラーは無視してください。これは、私の質問を皆さんに伝えるのに役立つ単なる例ではありません。ありがとう!

4

2 に答える 2

14

ラムダを使用してクロージャーを取得できます。

void wrapper()
{
    Object myObject;
    std::function<bool(int)> recurFun;
    recurFun = [&](int x) -> bool {
        // do some stuff with myObject
        if (some condition){return recurFun(x-1)}
        else {return true}
    }
}
于 2013-04-26T23:56:45.530 に答える
2

関数が何かを使用する必要がある場合、最初に頭に浮かぶ必要があるのは、それをその関数のパラメーターにすることです。したがって、再帰関数にオブジェクトをパラメーターとして受け入れさせ、再帰呼び出しでそれをスレッド化します。ラッパー関数は、オブジェクトを設定して渡すという自然なことを行います。

于 2013-04-27T00:01:33.160 に答える