c++ - 如何 std::bind 智能指针返回方法?

标签 c++ c++11 smart-pointers stdbind

所以我的 Bar 类中有这个方法:

std::shared_ptr<sf::Sprite> Bar::getStuff() const
{
   //...
}

我有我的回调类型定义:

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() 方法,它会返回一个指向 sf::Sprite 事物的智能指针

我怎样才能做到这一点?

最佳答案

鉴于您使用的是 c++11,为什么不用 lambda?

foo.registerCallback([&bar]() { bar.getStuff(); });

关于c++ - 如何 std::bind 智能指针返回方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277737/

相关文章:

c++ - 使用 std::weak_ptr 共享资源所有权

c++ - std::make_unique 可以将函数的输出作为参数吗?

c++ - ‘{’ 标记 C++ 之前的预期类名

c++ - 分析序列化代码

C++ 选择一个属性作为排序依据

c++ - 考虑引号之间的争论

c++ - 如何使用 std::map 在 C++ 中检索 std::vector<int>?

c++ - 如何从成对的初始化列表构造对象?

c++ - ofstream C++中同级目录中的文件

c++ - 无法包装 std::istream,移动后 unique_ptr 不为空