次の方法で共有


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

参照

関連項目

function クラス

function::operator=

左辺値と右辺値