15

5 つの引数を持つ C++ 関数があり、そのすべてにデフォルト値があります。最初の 3 つの引数を渡すと、プログラムは最後の 2 つの引数に既定値を割り当てます。3 つの引数を渡し、真ん中の 1 つをスキップして、1 番目、2 番目、5 番目の引数に値を与える方法はありますか?

4

4 に答える 4

6

直接ではありませんが、std::bind で何かできるかもしれません:

int func(int arg1 = 0, int arg2 = 0, int arg3 = 0);

// elsewhere...
using std::bind;
using std::placeholders::_1;
auto f = bind(func, 0, _1, 0);

int result = f(3); // Call func(0, 3, 0);

もちろん、欠点は、デフォルトのパラメーターを再指定していることです。他の誰かがもっと巧妙な解決策を思いつくだろうと確信していますが、あなたが本当に絶望しているなら、これはうまくいくかもしれません.

于 2013-09-26T13:03:00.780 に答える
0

いいえ、できません。
ただし、指定したシナリオを実現するには、代わりにパラメーターのデータ型配列を使用することをお勧めします。オーバーロードもできます。パラメータのデータ型が異なる場合は、必要なパラメータをメンバーとして持つクラスを定義する必要があります。そのクラスのオブジェクトを渡します。問題を解決するだけでなく、メンテナンス性の観点からもお勧めです。

于 2013-09-26T09:26:24.617 に答える