3

ここの実装を見ながらstd::reference_wrapper

コンストラクターと演算子は明らかですが、この部分は理解できませんでした

template< class... ArgTypes >
typename std::result_of<T&(ArgTypes&&...)>::type
  operator() ( ArgTypes&&... args ) const {
  return std::invoke(get(), std::forward<ArgTypes>(args)...);
}

誰かが私のためにそれを単純化できますか...いただければ幸いです

編集:そしての有用な例を与えることは素晴らしいことoperator()ですstd::reference_wrapper

4

1 に答える 1

3

これは、Callable への参照をラップoperator()するために適用できるメンバー関数を定義します。std::reference_wrapperその目的は、基礎となる Callable を呼び出すことです。

  • テンプレート パラメーターclass ... Argsは、基礎となる Callable に渡すことができるパラメーターに関して汎用にすることです。
  • 演算子の戻り値の型は、typename std::result_of<T&(ArgTypes&&...)>::type部分によって取得される Callable の呼び出しによって生成される戻り値の型である必要があります。
  • invokeCallable を呼び出す汎用的な方法として呼び出しを使用します。これは、 Callable のタイプ (Functor、関数ポインター、メンバー関数ポインターなど) に関係なく機能します。
  • std::forward引数リストを渡す際に使用して完全な転送を実現します。たとえば、元の呼び出しに渡された左辺値と右辺値は、基になる呼び出しで左辺値/右辺値性を保持します。
于 2016-06-01T11:54:37.760 に答える