以下代码片段在Visual Studio 2005中工作(使用boost 1.34),但无法在Visual Studio 2015中编译(使用boost 1.62),说明"错误C2672:' boost :: bind&#39 ;:找不到匹配的重载函数"
我在这里错过了什么吗?
谢谢!
typedef boost::shared_ptr< int > SProxySharedPtr;
SProxySharedPtr m_sptr_proxy;
auto a = boost::bind(&SProxySharedPtr::reset, &m_sptr_proxy);
答案 0 :(得分:1)
boost::shared_ptr<.>::reset()
是一个重载的成员函数。因此,您必须明确指定要使用的过载:
auto a = boost::bind(static_cast<void(SProxySharedPtr::*)()>(&SProxySharedPtr::reset), &m_sptr_proxy);
答案 1 :(得分: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);
}