bind shared_ptr :: reset - 找不到匹配的重载函数

时间:2016-12-31 00:24:41

标签: c++ boost bind shared-ptr

以下代码片段在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);

2 个答案:

答案 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);
}