У меня есть цепочка наследования с базой, являющейся базовым классом. Я хочу иметь возможность написать шаблон класса, который наследует Base и может использовать другой базовый класс Base. Я мог бы использовать виртуальное наследование, но нашел другое решение. Я хотел бы знать, если это общий/значительный/законный дизайн класса:
Напишите шаблон класса, в котором параметром шаблона является его класс, т.е. он должен быть базовым или базовым классом. В конструкторе я могу использовать static assert, чтобы действительно убедиться, что пользователь не использовал какой-либо незаконный класс в качестве параметра шаблона.
Если это сработает, у меня никогда не будет проблем с виртуальным наследованием... вопрос в том, что это нормально. Я никогда не видел его в других проектах, поэтому я хочу убедиться, прежде чем использовать его.
РЕДАКТИРОВАТЬ. Чтобы быть уверенным, что я не смущаю вас, вот какой-то код:
class Base
{
};
class Derived : public Base
{
};
template <Class TheBase>
class MyDerived : public TheBase
{
};
Теперь я могу использовать Base
или любой класс Base
-derived, например. Derived
, как параметр TheBase
.