最終更新日時(UTC):
が更新

履歴 編集

function template
<functional>

std::reference_wrapper::operator()(C++11)

template <class... ArgTypes>
typename result_of<T&(ArgTypes&&...)>::type operator ()(ArgTypes&&... args) const; //C++11

template <class... ArgTypes>
invoke_result_t<T&, ArgTypes...> operator ()(ArgTypes&&... args) const;            //C++17

template <class... ArgTypes>
constexpr invoke_result_t<T&, ArgTypes...> operator ()(ArgTypes&&... args) const;  //C++20

概要

保持している参照に対して関数呼び出しを行う

要件

Tが関数呼び出し可能な型(Callable)であること。

C++20から、型Tは完全型であること。

戻り値

INVOKE(get(), std::forward<ArgTypes>(args)...)

備考

operator()reference_wrapperクラスの直接のメンバ関数とする必要は無い(たとえば、基底クラスからの継承など)。

#include <iostream>
#include <functional>

struct F {
  int operator()(int a, int b) const
  {
    return a + b;
  }
};

int main()
{
  F f;

  // 関数オブジェクトへの参照を保持する
  std::reference_wrapper<F> r(f);

  // 保持している関数オブジェクトを呼び出す
  int result = r(1, 2);

  std::cout << result << std::endl;
}

出力

3

バージョン

言語

  • C++11

処理系

参照