2016-12-31 51 views
0

下面的代碼片段在Visual Studio 2005中工作(使用boost 1.34),但它無法在Visual Studio 2015中編譯(使用boost 1.62),說錯誤C2672:boost :: bind':沒有匹配的重載函數找到「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 is 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。 troubleshooting.binding_an_overloaded_function – hinewwiner

0

我試圖使用GCC,但看到了類似的錯誤。我可以把它編譯的唯一方式是繼承的boost :: 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); 
} 
相關問題