std::bind() 没有合适的转换用户定义的转换
No suitable conversion user-defined conversion with std::bind()
我正在尝试实现一个按钮 class,它会在单击按钮时调用回调。
class Button
{
public:
void SetOnMouseClickCallback(std::function<void()> f);
// Some other stuff
private:
std::function<void()> callback;
};
using ButtonPtr = std::unique_ptr< Button >;
void Button::SetOnMouseClickCallback(std::function<void()> f)
{
callback = f;
}
在我的应用程序中 class 我想初始化所有按钮并最终为它们分配回调:
void App::Initialize()
{
ButtonPtr b = std::make_unique<Button>(100.f, 100.f, 200.f, 50.f, "texture.jpg");
b->SetOnMouseClickCallback(std::bind(&Foo)); // Error here under std::bind
}
void App::Foo()
{
cout<<"bar";
}
卡在这里一整天了,一点头绪都没有了。希望您能够帮助我。
提前致谢。
Foo 不是 void()
。您忘记将其绑定到当前实例:
std::bind(&App::Foo, this)
非静态成员函数有一个隐式函数参数,它是要调用的对象。因此,您需要将要调用的对象传递给 bind
。这意味着你应该使用
b->SetOnMouseClickCallback(std::bind(&Foo, this));
如果要使用当前对象或者
App call_on;
b->SetOnMouseClickCallback(std::bind(&Foo, &call_on));
如果你想让它有自己的对象。
我正在尝试实现一个按钮 class,它会在单击按钮时调用回调。
class Button
{
public:
void SetOnMouseClickCallback(std::function<void()> f);
// Some other stuff
private:
std::function<void()> callback;
};
using ButtonPtr = std::unique_ptr< Button >;
void Button::SetOnMouseClickCallback(std::function<void()> f)
{
callback = f;
}
在我的应用程序中 class 我想初始化所有按钮并最终为它们分配回调:
void App::Initialize()
{
ButtonPtr b = std::make_unique<Button>(100.f, 100.f, 200.f, 50.f, "texture.jpg");
b->SetOnMouseClickCallback(std::bind(&Foo)); // Error here under std::bind
}
void App::Foo()
{
cout<<"bar";
}
卡在这里一整天了,一点头绪都没有了。希望您能够帮助我。 提前致谢。
Foo 不是 void()
。您忘记将其绑定到当前实例:
std::bind(&App::Foo, this)
非静态成员函数有一个隐式函数参数,它是要调用的对象。因此,您需要将要调用的对象传递给 bind
。这意味着你应该使用
b->SetOnMouseClickCallback(std::bind(&Foo, this));
如果要使用当前对象或者
App call_on;
b->SetOnMouseClickCallback(std::bind(&Foo, &call_on));
如果你想让它有自己的对象。