Возможно ли ввести ограничение на наследование классов?
Есть следующая структура наследования:
class Parent;
class Child1: public Parent;
class Child2: public Parent;
class GrandChild: public Child1;
vector<Parent*> V{};
Вектор V может содержать указатели на экземпляр любого из этого классов. Но возможно ли запретить использование класса GrandChild? Т.е. вектор V мог бы содержать только Child1*, Child2* (Parent*).
Ответы (1 шт):
вам надо, чтобы компилятор ругался?
поскольку везде используется указатель и в векторе при приведении типов можно хранить хоть указатель на int, типа
val = 0;
V.push_back((Parent*)&val);
можно сделать извратно -
создать специальный класс-оболочку
Guard, который будет содержать ссылку наParentвектор должен хранить именно этот класс, а не указатель
vector<Guard> V;в конструкторе класса или в методе
setделать проверку - какой тип передаваемого объекта и отсекать всё, что неChild1,Child2илиParent
типа так:
Child1 obj1;
GrandChild obj2
vector<Guard> V;
V.push_back(Guard(obj1)); // сработает
V.push_back(Guard(obj2)); // не сработает, компилятор ругнется