如何在C++接口中正确实现重载Foo方法的默认转发逻辑?
正确实现方式
你的代码存在两个潜在问题:一是C风格强制转换不够安全,二是直接调用Foo((Base&)obj)会触发动态绑定,实际调用的是子类重写后的Foo(Base&),可能偏离你原本的转发意图。
正确的实现需要做两点调整:
- 用类型安全的
static_cast替代C风格强制转换,由于Derived是Base的公有继承,这种转换明确且安全。 - 限定调用
Interface类作用域下的Foo(Base&),避免动态绑定带来的意外行为,确保转发逻辑严格按照接口定义执行。
修正后的代码如下:
void Interface::Foo(Derived& obj) { Interface::Foo(static_cast<Base&>(obj)); }
补充说明:因为Interface::Foo(Base&)是纯虚函数,所有继承Interface的子类必须实现该方法;而Foo(Derived&)的默认转发逻辑会自动生效,子类如果不需要针对Derived对象做特殊处理,无需重写该方法。
内容的提问来源于stack exchange,提问作者dEmigOd
相关产品推荐
相关产品推荐

