7

私はしばらく Loki の Functor を使用しており、最近それについて質問しました (まだ回答がありません...) std::function を使用するように言われましたが、Loki の Functor の実装の方が好きです。パラメーターとしてのポインター (例: std::shared_ptr)。

struct Toto
{
    void foo( int param )
    {
        std::cout << "foo: " << param << std::endl;
    }
};

int
main( int argc, const char** argv )
{
    std::shared_ptr<Toto> ptr = std::make_shared<Toto>();

    Loki::Functor<void, LOKI_TYPELIST_1(int)> func( ptr, &Toto::foo );

    func(1);
}

std::function でそうする方法はありますか?

4

3 に答える 3

6

を使用しstd::bindます。

auto func = std::bind(&Toto::foo, ptr, std::placeholders::_1);

ここで、funcから返された型に推測されstd::bindます またはautoを使用したくない場合は (および使用したいstd::function)

std::function<void(int)> func = std::bind(&Toto::foo, 
ptr, std::placeholders::_1);

ここでstd::functionは の結果から構築されstd::bindます。 ptrから返されたオブジェクトにコピーされますが、コピーが必要ない場合は/std::bindを使用できます。std::refstd::cref

于 2013-12-16T11:08:20.093 に答える