function::target
格納されている呼び出し可能オブジェクトが、指定されているように呼び出すことができるかどうかをテストします。
template<class Fty2>
Fty2 *target();
template<class Fty2>
const Fty2 *target() const;
パラメーター
- Fty2
テスト対象となる呼び出し可能オブジェクトの型。
解説
型 Fty2 は、T1, T2, ..., TN という引数の型と、Ret という戻り値の型で呼び出し可能であることが必要です。 target_type() == typeid(Fty2) の場合はターゲット オブジェクトのアドレスが返され、それ以外の場合は 0 が返されます。
型 Fty2 は、型 Fty2, T1, T2, ..., TN のそれぞれの左辺値 fn, t1, t2, ..., tN について、INVOKE(fn, t1, t2, ..., tN) の形式が有効であり、なおかつ、Ret が void 以外で、Ret に変換可能である場合に、T1, T2, ..., TN という引数の型と、Ret という戻り値の型で呼び出し可能です。
使用例
// std_tr1__functional__function_target.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val)
{
return (-val);
}
int main()
{
typedef int (*Myfun)(int);
std::function<int (int)> fn0(neg);
std::cout << std::boolalpha << "empty == " << !fn0 << std::endl;
std::cout << "no target == " << (fn0.target<Myfun>() == 0) << std::endl;
Myfun *fptr = fn0.target<Myfun>();
std::cout << "val == " << (*fptr)(3) << std::endl;
std::function<int (int)> fn1;
std::cout << std::boolalpha << "empty == " << !fn1 << std::endl;
std::cout << "no target == " << (fn1.target<Myfun>() == 0) << std::endl;
return (0);
}
必要条件
ヘッダー: <functional>
名前空間: std