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

履歴 編集

function
<functional>

std::function_ref::コンストラクタ(C++26)

template<class F> function_ref(F* f) noexcept;  // (1)

template<class F>
constexpr function_ref(F&& f) noexcept;  // (2)

template<auto f>
constexpr function_ref(nontype_t<f>) noexcept;  // (3)
template<auto f, class U>
constexpr function_ref(nontype_t<f>, U&& obj) noexcept;  // (4)
template<auto f, class T>
constexpr function_ref(nontype_t<f>, /*cv*/ T* obj) noexcept;  // (5)

constexpr function_ref(const function_ref&) noexcept = default;  // (6)

概要

function_refオブジェクトを構築する。

function_refクラステンプレートパラメータのnoexcept例外指定 noex に応じて、説明用のbool型テンプレート定数is-invocable-using<T...>を次のように定義する :

function_refオブジェクトは、説明専用のメンバ変数thunk-ptrbound-entityを保持する。

テンプレートパラメータ制約

function_refクラステンプレートパラメータのCV修飾子 cv に応じて

  • (1) : is_function<F>true、かつis-invocable-using<F>trueであること
  • (2) : Tremove_refernce_t<F>としたとき
    • remove_cvref_t<F>function_refと同一型ではなく、かつ
    • is_member_pointer_v<T>falseであり、かつ
    • is-invocable-using</*cv*/ T&>trueであること
  • (3) : Fdecltype(f)としたとき
    • is-invocable-using<F>trueであること
  • (4) : Tremove_refernce_t<F>Fdecltype(f)としたとき
    • is_rvalue_reference_v<U&&>falseであり、かつ
    • is-invocable-using<F, /*cv*/ T&>trueであること
  • (5) : Fdecltype(f)としたとき
    • is-invocable-using<F, /*cv*/ T*>trueであること

適格要件

  • (3), (4), (5) : Fdecltype(f)としたとき、is_pointer<F> || is_member_pointer<F>trueならば、fがヌルポインタでないこと。

事前条件

  • (1) : fがヌルポインタでないこと。

効果

function_refクラステンプレートパラメータのCV修飾子 cv に応じて

例外

投げない

#include <functional>
#include <iostream>
#include <utility>

int ident_func(int x)
{ return x; }

struct ident_functor {
  int operator()(int x) const
  { return x; }
};

struct X {
  int ident_func(int x) const
  { return x; }
};


int main()
{
  // (1) 関数ポインタ
  {
    std::function_ref<int(int)> f1 = &ident_func;
    std::cout << "(1) : " << f1(1) << std::endl;
  }
  // (2) 関数オブジェクト
  {
    ident_functor functor;
    std::function_ref<int(int)> f2 = functor;
    std::cout << "(2) : " << f2(2) << std::endl;
  }
  // (3) メンバ関数
  {
    std::function_ref<int(X&, int)> f3 = std::nontype<&X::ident>;
    X obj;
    std::cout << "(3) : " << f3(obj, 3) << std::endl;
  }
  // (4), (5) メンバ関数+オブジェクト束縛
  {
    X obj;
    std::function_ref<int(int)> f4{std::nontype<&X::ident>, obj};
    std::cout << "(4) : " << f4(4) << std::endl;
    std::function_ref<int(int)> f5{std::nontype<&X::ident>, &obj};
    std::cout << "(5) : " << f5(5) << std::endl;
  }
  // (6) コピーコンストラクタ
  {
    std::function_ref<int(int)> f1 = &ident_func;
    std::function_ref<int(int)> f6 = f1;
    std::cout << "(6) : " << f6(6) << std::endl;
  }
}

出力

(1) : 1
(2) : 2
(3) : 3
(4) : 4
(5) : 5
(6) : 6

バージョン

言語

  • C++26

処理系

参照