0

次のシグネチャで関数を呼び出したい:

void foreach(std::list<float>& floats, boost::function<float(float)> action);

この関数はリストを反復し、 を実行して各要素を変更しますnew_value = action(old_value)。常に同じ float 値を返すようなアクション関数を提供する最短の方法は何ですか? 私は自分で試したことはありませんが、C++11 ラムダでうまくいくと思います。

foreach(floats, [](float){ return 3.14; });

関数を呼び出す必要があり、使用できないと仮定すると、C++03 で最も近い代替手段は何std::fillですか? 実際に通常の関数を宣言することを避けるためのトリックはありますか?

4

3 に答える 3

2

あなたが使用することができます、

std::fill(floats.begin(), floats.end(), 3.14);
于 2013-09-18T08:46:29.853 に答える
2

C++03 で最も近い代替手段は何ですか? 実際に通常の関数を宣言することを避けるためのトリックはありますか?

C++03 で最も近いトリックは、関数またはファンクター クラスを宣言することです。

float DoThing1( float )
{
  return 3.13;
}

struct DoThing2
{
  float operator()(float)
  {
    return 3.13;
  }
};
于 2013-09-18T08:47:12.950 に答える
0

Boost.Phoenix を確認してください。nullary functions として値を実装しています。
おそらく、必要に応じて Boost.Function で使用する方法を理解する必要があります。

Phoenix チュートリアルの nullary 関数の例を次に示します。

template <typename F>
void print(F f)
{
    cout << f() << endl;
}

int
main()
{
    print(val(3));
    print(val("Hello World"));
    return 0;
}
于 2013-09-18T14:35:48.830 に答える