C++ std::function 从派生绑定 class
C++ std::function bind from derived class
如果我有一个基础 class MessageWrapper,带有子 class SetConfigurationData,为什么绑定子 class 参数不起作用?
它不应该以多态方式工作吗?
Class MessageHandler
{
public:
void RegisterHandler(std::function<void(MessageWrapper &)> callback_)
{}
};
class Testing
{
public:
Testing(MessageHandler &handler_)
: m_Handler(handler_)
{
m_Handler.RegisterHandler(std::bind(&Testing::TestMessageHandler, this, std::placeholders::_1));
}
void TestMessageHandler(SetConfigurationData &msg_)
{}
MessageHandler m_Handler;
};
我收到错误:
“无法特化函数模板 'unkown-type std::invoke(Callable &&, Types &&..)'
如果我这样做就有效:
void TestMessageHandler(MessageWrapper &msg_)
{}
多态性不能这样工作。我将用一个例子来解释。先说功能吧。
void TestMessageHandler(SetConfigurationData &msg_)
在它的主体中有一些特定于子对象的东西。说
msg.child_method()
既然 RegisterHandler callback_() 将基础 class 作为参数,它应该如何处理这个 "msg.child_method()" 调用,因为它不是基础 class 方法?
现在,如果我们反过来做会发生什么。以下作品。
class MessageWrapper
{
};
class SetConfigurationData : public MessageWrapper
{
public:
void RegisterHandler(std::function<void(SetConfigurationData&)> callback_)
{}
};
class MessageHandler
{
};
class Testing
{
public:
Testing(SetConfigurationData &handler_)
: m_Handler(handler_)
{
m_Handler.RegisterHandler(std::bind(&Testing::TestMessageHandler, this, std::placeholders::_1));
}
void TestMessageHandler(MessageWrapper &msg_)
{}
SetConfigurationData m_Handler;
};
即使 TestMessageHandler 以 MessageWrapper 作为参数,您也可以将其绑定到以 Child class (SetConfigurationData) 作为参数的 callback_。
如果我有一个基础 class MessageWrapper,带有子 class SetConfigurationData,为什么绑定子 class 参数不起作用?
它不应该以多态方式工作吗?
Class MessageHandler
{
public:
void RegisterHandler(std::function<void(MessageWrapper &)> callback_)
{}
};
class Testing
{
public:
Testing(MessageHandler &handler_)
: m_Handler(handler_)
{
m_Handler.RegisterHandler(std::bind(&Testing::TestMessageHandler, this, std::placeholders::_1));
}
void TestMessageHandler(SetConfigurationData &msg_)
{}
MessageHandler m_Handler;
};
我收到错误: “无法特化函数模板 'unkown-type std::invoke(Callable &&, Types &&..)'
如果我这样做就有效:
void TestMessageHandler(MessageWrapper &msg_)
{}
多态性不能这样工作。我将用一个例子来解释。先说功能吧。
void TestMessageHandler(SetConfigurationData &msg_)
在它的主体中有一些特定于子对象的东西。说
msg.child_method()
既然 RegisterHandler callback_() 将基础 class 作为参数,它应该如何处理这个 "msg.child_method()" 调用,因为它不是基础 class 方法?
现在,如果我们反过来做会发生什么。以下作品。
class MessageWrapper
{
};
class SetConfigurationData : public MessageWrapper
{
public:
void RegisterHandler(std::function<void(SetConfigurationData&)> callback_)
{}
};
class MessageHandler
{
};
class Testing
{
public:
Testing(SetConfigurationData &handler_)
: m_Handler(handler_)
{
m_Handler.RegisterHandler(std::bind(&Testing::TestMessageHandler, this, std::placeholders::_1));
}
void TestMessageHandler(MessageWrapper &msg_)
{}
SetConfigurationData m_Handler;
};
即使 TestMessageHandler 以 MessageWrapper 作为参数,您也可以将其绑定到以 Child class (SetConfigurationData) 作为参数的 callback_。