虚拟地从一个类派生的力量

Rei*_*ica 8 c++ static-assert virtual-inheritance type-traits c++11

我们在项目中有一个特殊的接口框架,部分要求是代表接口的类只能用作虚拟基类,而不能用作非虚拟基类.有没有办法在代码中强制执行此操作?也就是说,如果类是从非虚拟派生的,则产生编译错误.

我可以访问由VS 2010实现的C++ 11:这意味着static_assert,enable_if并且<type_traits>可用.

iam*_*ind 3

IMO,没有干净且独立于平台的解决方案可用于解决此问题。

最好的方法是手动将每个继承更改为virtual继承。
要实现这一点,识别接口的派生类(例如class Base)很容易(!)。为此,可以执行以下步骤:

  1. 制作class Basefinal(c++11); IEclass Base final { ...
  2. 编译代码,它将为其所有派生类生成编译器错误
  3. 去检查每个派生类并将继承设置为 virtual
  4. 去掉final关键字,代码编译成功

不幸的是,每当您想要进行此类健全性检查时,都必须定期遵循此过程。