问题描述
我有一个 BaseMsg
类,专门的派生消息,并将指向这些消息的处理程序的指针存储在数组中。
将派生消息的处理程序的函数指针转换为 BaseMsg
处理程序时,我在 gcc 中收到 -Wcast-function-type
警告。
有没有办法在没有警告出现的情况下进行这样的转换(即不禁用构建系统中的警告或通过编译指示)?
如果我直接调用该函数,这会起作用,因为 DerivedMsg
是 BaseMsg
的直接子代
这是一个给出一般想法的最小示例:
struct BaseMsg
{};
struct DerivedMsg : public BaseMsg
{};
struct Foo
{
void bar(BaseMsg&)
{}
void baz(DerivedMsg&)
{}
};
int main()
{
using BaseHandler = void (Foo::*)(BaseMsg&);
using ChildHandler = void (Foo::*)(DerivedMsg&);
ChildHandler c = &Foo::baz;
BaseHandler b = &Foo::bar;
b = reinterpret_cast<BaseHandler>(c); // -Wcast-function-type
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)