Rei*_*ica 8 c++ static-assert virtual-inheritance type-traits c++11
我们在项目中有一个特殊的接口框架,部分要求是代表接口的类只能用作虚拟基类,而不能用作非虚拟基类.有没有办法在代码中强制执行此操作?也就是说,如果类是从非虚拟派生的,则产生编译错误.
我可以访问由VS 2010实现的C++ 11:这意味着static_assert,enable_if并且<type_traits>可用.
IMO,没有干净且独立于平台的解决方案可用于解决此问题。
最好的方法是手动将每个继承更改为virtual继承。
要实现这一点,识别接口的派生类(例如class Base)很容易(!)。为此,可以执行以下步骤:
class Base为final(c++11); IEclass Base final { ...virtualfinal关键字,代码编译成功不幸的是,每当您想要进行此类健全性检查时,都必须定期遵循此过程。