0

C++14 では、任意の数の引数を完全に転送するラムダを記述できます。

template<typename... Args>
void process(Args&&... args);                       // template to forward to


auto wrapper = [](auto&&... args) 
{ 
  std::cout << "Invoking lambda wrapper\n";
  process(std::forward<decltype(args)>(args)...);   // do the forwarding
};

を使用して同じ効果を達成する方法はありbindますか? によって作成された関数オブジェクトbindは任意の数の引数を取ることを知っています。また、そのようなオブジェクトはバインドされていない引数に対して完全転送を使用することを知っていますが、bind渡されたすべての引数に対して完全転送を使用する関数オブジェクトを作成するように指示する方法はありますか?への呼び出しにプレースホルダーがなかったとしてもbind

4

1 に答える 1

4

現在はできませんが、http://cplusplus.github.io/EWG/ewg-complete.html#44を参照して、サポートするための提案を確認してください。

より多くの可変個引数関数が私の C++ コードに取り込まれるにつれて、可変個引数バインドがないことにますます悩まされています。正確に何を使用するかについては、少し面倒です。2つの賢明な選択肢があるように私には思えます(他の人には他の選択肢があるかもしれません)

1) _args : 名前のないすべての引数を使用します。
2) _3onwards : 3 番目以降のすべての引数。

個人的には、可変引数の複数の範囲や、より複雑なチョッピング (最後のいくつかの引数を取得するなど) の必要性を発見していません。

于 2014-07-16T10:55:22.340 に答える