2016-12-31 10 views
0

次のコードスニペットはVisual Studio 2005で(ブースト1.34で)動作しましたが、Visual Studio 2015(ブースト1.62)で "エラーC2672: :: bind ':一致するオーバーロードされた関数が見つかりませんでした。バインドshared_ptr :: reset - 一致するオーバーロードされた関数が見つかりませんでした

私はここに何か不足していますか?

ありがとうございました!

typedef boost::shared_ptr<int> SProxySharedPtr; 
SProxySharedPtr m_sptr_proxy; 

auto a = boost::bind(&SProxySharedPtr::reset, &m_sptr_proxy); 
+1

'SProxySharedPtr :: reset'関数を共有してください。それはパラメータなしで呼び出し可能ですか? – volatilevar

+0

プロンプトの返信ありがとう:) – hinewwiner

+0

SProxySharedPtrはtypedefです(typedef boost :: shared_ptr < int > SProxySharedPtr;)。だから基本的にはboost :: shared_ptrと同じです hinewwiner

答えて

1

boost::shared_ptr<.>::reset()オーバーロードされたメンバ関数です。結果として、使用するオーバーロードを明示的に指定する必要があります。

auto a = boost::bind(static_cast<void(SProxySharedPtr::*)()>(&SProxySharedPtr::reset), &m_sptr_proxy); 
+1

私は参照してください。どうもありがとうございました!! (私はそれが以前にどのように機能したのだろうか)。この問題を経験している人は、http://www.boost.org/doc/libs/1_62_0/libs/bind/doc/html/bind.html#bindを参照してください。トラブルシューティング.binding_an_overloaded_function – hinewwiner

0

GCCを使用しようとしましたが、同様のエラーが発生しました。私はそれをコンパイル得ることができる唯一の方法は、ブーストをサブクラス化することです::以下のようにshared_ptrの(多分これはあなたが求めているものではありません):

typedef boost::shared_ptr<int> SProxySharedPtr; 

struct Bar : SProxySharedPtr { 
    void reset() { 
     SProxySharedPtr::reset(); 
    } 
}; 

int main() 
{ 
    const Bar m_sptr_proxy; 
    boost::bind(&Bar::reset, &m_sptr_proxy); 
} 
関連する問題