function::function
空のラッパを構築するか、固定シグネチャを持つ任意の型の呼び出し可能オブジェクトを格納します。
function();
function(nullptr_t npc);
function(const function& _Right);
template<class Fx>
function(Fx _Func);
template<class Fx>
function(reference_wrapper<Fx> _Fnref);
template<class Fx, class Alloc>
function(
Fx _Func,
const Alloc& _Ax
);
template<class Fx, class Alloc>
function(
reference_wrapper<Fx> _Fnref,
const Alloc& _Ax
);
パラメーター
_Right
コピーする関数オブジェクト。Fx
呼び出し可能オブジェクトの型。_Func
ラップする呼び出し可能オブジェクト。Alloc
アロケーターの型。_Ax
アロケーター。_Fnref
ラップする呼び出し可能オブジェクトの参照。
解説
先頭の 2 つのコンストラクターは、空の function オブジェクトを構築します。 次の 3 つのコンストラクターは、オペランドとして渡された呼び出し可能オブジェクトを保持する function オブジェクトを構築します。 最後の 2 つのコンストラクターは、アロケーター オブジェクト _Ax を使用してストレージを割り当てます。
使用例
// std_tr1__functional__function_function.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
#include <vector>
int square(int val)
{
return val * val;
}
class multiply_by
{
public:
explicit multiply_by(const int n) : m_n(n) { }
int operator()(const int x) const
{
return m_n * x;
}
private:
int m_n;
};
int main()
{
typedef std::vector< std::function<int (int)> > vf_t;
vf_t v;
v.push_back(square);
v.push_back(std::negate<int>());
v.push_back(multiply_by(3));
for (vf_t::const_iterator i = v.begin(); i != v.end(); ++i)
{
std::cout << (*i)(10) << std::endl;
}
std::function<int (int)> f = v[0];
std::function<int (int)> g;
if (f) {
std::cout << "f is non-empty (correct)." << std::endl;
} else {
std::cout << "f is empty (can't happen)." << std::endl;
}
if (g) {
std::cout << "g is non-empty (can't happen)." << std::endl;
} else {
std::cout << "g is empty (correct)." << std::endl;
}
return 0;
}
必要条件
ヘッダー: <functional>
名前空間: std