Есть ли еще веские причины для использования базовых цепочек, а не плоского множественного наследования?
Раньше было так, что некоторые классы были разработаны для наследования в цепочке. Я думаю, что это было заставить пустую оптимизацию базового класса.
Я понимаю, что так были разработаны 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 , "!");}
служит ли он больше первичной или вторичной цели?