2

C ++ファンクター構文をグーグルで検索すると、さまざまな結果が得られますが、それらのいずれにも何が必要かはわかりません。テンプレートを使用するもの、単一のクラスを使用するもの、複数のクラスを使用するもの、代わりに構造体を使用するものがあります。私がやりたいことのために私が必要とする特定の要素が何であるかはわかりません。だから今、私がしたいこと:

私には2つの機能があります。これらは両方ともまったく同じパラメータを取りますが、名前が異なり、異なる結果を返しますが、戻り値のタイプも同じです。

unsigned foo1(char *start, char *end);
unsigned foo2(char *start, char *end);

ブール変数の値に応じて、呼び出す関数を選択したいだけです。2つから選択する述語を書くこともできますが、それはエレガントな解決策ではないようです。これがCの場合、単純な関数ポインターを使用しますが、C++ではうまく機能しないとアドバイスされています。

編集:私の制御できない制限のため、このシナリオでは、C++11を使用できません。

4

1 に答える 1

4

使用するだけstd::functionです:

std::function<unsigned int(char*, char*)> func = condition ? foo1 : foo2;
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^ function signature

// ...

unsigned int result = func(start, end);

また、関数ポインタはC++で正常に機能します。

auto func = condition ? foo1 : foo2;

unsigned int result = func(start, end);

しかしstd::function、より柔軟です。

于 2012-10-21T00:48:02.240 に答える