微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解决 Microsoft Visual C++、多重继承和协变返回类型的问题

如何解决解决 Microsoft Visual C++、多重继承和协变返回类型的问题

我正在尝试使用使用类似于以下方法的第三方库:

project_name entry_point_name0 <args>

GCC 和 Clang 对此没有任何问题,但是 the MSVC compiler chokesstruct A { virtual A* clone(); }; struct B1: public virtual A { B1* clone() override; }; struct B2: public virtual A { B2* clone() override; }; struct C: public B1,public B2 { C* clone() override; };

据我所知,这个构造在 C++ 标准下是有效的:error C2250: 'C': ambiguous inheritance of 'B1 *A::clone(void)' 与指向任何基类的指针正确协变,C* 的定义应该覆盖(或隐藏)任何C 本身的基类中 clone() 的定义,以及为 C::clone() 的任何使用点定义的函数体被调用和应该返回什么类型的规则。

我找到了 2011 年的 Stack Overflow 答案,声称它是 known bug in MSVC,但对我帮助不大。 (特别是因为上下文现在是一个链接。)

如前所述,这是一个第三方库。他们的主要目标编译器是 GCC 和 Clang。 (我们的也是,但我们也需要支持 MSVC。)虽然他们可能会接受小补丁以使事情与 MSVC 一起工作,但建议仅仅因为 MSVC 困难而彻底重写是不可能的。 (我看了看,这里的多重继承和协变返回类型都深深地融入了库的设计中。)它也是一个具有独特功能的专门库,所以“寻找不同的库”也行不通。

有什么方法可以说服 Microsoft Visual C++ 实际编译这段代码?或者是否有其他方法可以在不大量重写库的情况下以兼容 MSVC 的方式启用此功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。