2010-11-19 5 views
1

[]演算子がオーバーロードされたクラスがあります。私も開始するスレッドがあります... スレッドに[]をバインドする方法はありますか?Boost ::バインド問題バインディングオーバーロードされた演算子

私はこの試みた:

threadpool.schedule(bind(static_cast< MyClass (MyClass::*)(const MyClass &arg)>(&MyClass::operator[]), arg))

をしかし、VS2008は言う:

エラーC2664:

'boost::threadpool::thread_pool::schedule': cannot convert parameter 1 from 'boost::_bi::bind_t' to 'const boost::function0 &' 

どのように私はこれを解決することができますか?前もって感謝します。

+0

あなたは 'MyClass'コードを提供できますか? – icecrime

答えて

1

これは間違っています。あなたのメンバー関数は引き続き1つの引数を受け取ります。だから、プレースホルダを必要とするか、this

threadpool.schedule(bind( 
    static_cast< MyClass (MyClass::*)(const MyClass &arg)>(&MyClass::operator[]), 
    this, arg)) 

そのクラス型はしかし少し奇妙に見える受け入れoperator[]をバインドするのを忘れていました。ここでは、「通常の」添字演算子を探すべき例を示します。

threadpool.schedule(bind(
    static_cast< MyClass (MyClass::*)(std::size_t)>(&MyClass::operator[]), this, index) 
); 
関連する問題