• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function template
    <functional>

    std::reference_wrapper::operator()

    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

    処理系

    参照