解决 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 (将#修改为@)