3

私は現在、と働いていboost::asymmetric_coroutineます。グローバル名前空間に通常の関数があるとしましょう:

void foo(boost::coroutines::asymmetric_coroutine<int>::push_type & sink)
{
    //do something
    sink(100);
    //do something else
}

その場合、次の方法でこの関数を使用してコルーチンを作成および実行できます。

boost::coroutines::asymmetric_coroutine<void>::pull_type coro{foo};

私がする必要があるのは、同じ方法でクラス メンバー関数を使用することです。私が理解しているように、boost::bind何らかの方法で使用する必要がありますが、次のコードは機能しません。

class MyClass
{
public:
    void create_coro()
    {
        boost::coroutines::asymmetric_coroutine<int>::pull_type coro
        {
            boost::bind(&MyClass::foo, _1);
        };
    }

private:
    void foo(boost::coroutines::asymmetric_coroutine<int>::push_type & sink)
    {
        //do something
    }
}

発生するエラーは

「get_pointer(const boost::coroutines::push_coroutine&)」を呼び出す一致する関数がありません

どうすれば適切に行うことができますか?

4

1 に答える 1

4

そのはず

    boost::coroutines::asymmetric_coroutine<int>::pull_type coro
    {
        boost::bind(&MyClass::foo, this, _1);
    };

thisメンバー関数を使うので注意。

于 2015-08-12T07:01:05.497 に答える