Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 1.48 KB

target.md

File metadata and controls

87 lines (63 loc) · 1.48 KB

target

  • functional[meta header]
  • std[meta namespace]
  • function[meta class]
  • function template[meta id-type]
  • cpp11[meta cpp]
template <class T>
T* target() noexcept;

template <class T>
const T* target() const noexcept;

概要

元となる関数を取得する。

要件

Tが、ArgTypes...型をパラメータにとり、Rを戻り値の型とする関数、または関数オブジェクトであること。

戻り値

target_type() == typeid(T)ならば、保持している関数へのポインタを返す。そうれなければヌルポインタを返す。

#include <iostream>
#include <functional>

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

int ident_func(int x)
{ return x; }

int main()
{
  // 関数オブジェクト
  {
    std::function<int(int)> f = ident_functor();
    ident_functor* p = f.target<ident_functor>();

    if (p) {
      std::cout << (*p)(1) << std::endl;
    }
  }

  // 関数ポインタ
  {
    std::function<int(int)> f = ident_func;
    using fp_type = int(*)(int);

    fp_type* p = f.target<fp_type>();

    if (p) {
      std::cout << (*p)(1) << std::endl;
    }
  }
}
  • target[color ff0000]

出力

1
1

バージョン

言語

  • C++11

処理系

参照