2016-12-31 12 views
0

В Visual Studio 2005 был обработан следующий фрагмент кода (с повышением 1.34), но он не скомпилирован в Visual Studio 2015 (с boost 1.62), говоря, что «ошибка C2672:« повышение :: 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, но увидел похожие ошибки. Единственный способ, которым я могу получить его скомпилировать это подкласс повышение :: 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^