У меня есть много классов A, которые очень похожи, за исключением их структуры данных, поэтому я хотел бы переместить общий материал в базовый шаблон B. Проблема в том, что параметр шаблона является частью класса наследования, поэтому он приходит после того, как мне нужно передать его в шаблон. Как это может быть достигнуто без перемещения X из A (попытка сохранить инкапсуляцию)?Как создать шаблон суперкласса с собственным типом?
template<class X>
class B {
int somefunction(X a);
};
class A : public B<X> {
public:
struct X { // different in each class A
int x;
};
};
NB: «Члены» А необходимо делегировать на центральный контейнер по причинам архитектуры, так что мне нужно это суб-структуры. Да, я знаю, мне это тоже не нравится, но это невозможно изменить.
Если 'X' является общедоступным внутри' A', что вы инкапсулируете? –
Если 'X' является общедоступным, переместите его за пределы' A' и просто используйте 'B' с различными структурами. нет необходимости в наследовании для усложнения вещей. – andre
Я понимаю инкапсуляцию как совокупность того, что принадлежит вместе, а не как нечто скрывающее. – Daniel