Skip to content

Latest commit

 

History

History
79 lines (59 loc) · 1.97 KB

File metadata and controls

79 lines (59 loc) · 1.97 KB

operator()

  • functional[meta header]
  • std[meta namespace]
  • reference_wrapper[meta class]
  • function template[meta id-type]
  • cpp11[meta cpp]
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;
}
  • r(1, 2)[color ff0000]

出力

3

バージョン

言語

  • C++11

処理系

参照