是否还有充分的理由使用链式基本案例而不是平面多重继承?
过去的情况是,某些类被设计成链式继承。我认为这是强制空基类优化。我知道这就是 Boost.Operators 的设计方式。
struct empty{};
template<class Base = empty>
struct A : Base{};
template<class Base = empty>
struct B : Base{};
template<class Base = empty>
struct C : Base{};
struct S : A<B<C<>>>{};
int main(){static_assert(sizeof(S)==1, "!");}
这在新的编译器中是否有必要(今天是 2019 年),或者我可以放弃所有的复杂性并接受正常的继承?
struct A{};
struct B{};
struct C{};
struct S : A, B, C{};
int main(){static_assert( sizeof(S) == 1 , "!");}
它不再用于任何主要或次要目的吗?