【发布时间】:2015-12-14 22:23:48
【问题描述】:
所以我的Bar 类中有这个方法:
std::shared_ptr<sf::Sprite> Bar::getStuff() const
{
//...
}
我有我的回调 typedef:
typedef std::function<void()> Callback;
void Foo::registerCallback(const Callback& callback)
{
//...
}
现在我想在这个方法上使用std::bind,比如:
Foo foo;
Bar bar; //I create an instance of an Bar, called bar.
foo.registerCallback(std::bind(&Bar::getStuff, std::ref(bar))); //<--- ERROR!!!!
错误:
error C2562: 'std::_Callable_obj<std::_Bind<true,std::shared_ptr<sf::Sprite>,std::_Pmf_wrap<std::shared_ptr<sf::Sprite> (__thiscall Bar::* )(void)
如果我想使用 void 方法,没关系。但我需要使用getStuff() 方法,它会将smart pointer 返回到 sf::Sprite 事物。
我怎样才能做到这一点?
【问题讨论】:
-
试试
std::bind(&Bar::getStuff, &bar),IIRC,std::ref不能在INVOKE中使用 -
@PiotrSkotnicki
bind解开reference_wrappers,独立于INVOKE。 (无论如何,LWG 2219 让INVOKE与他们合作。) -
这是哪个版本的 MSVC?
-
VS C++ 2012 与编译器:“Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)”
-
@T.C.哦,原来如此,谢谢
标签: c++ c++11 smart-pointers stdbind