Нарезка объектов в частном наследовании

Почему разделение объектов не происходит в частном наследовании? Static_cast выдает ошибку в таких случаях?
Я понимаю, что частное наследование не содержит отношения «есть -» между его классами наследования. Имеет ли это какое-то отношение к нарезке, так как производная не имеет типа базы, поэтому компилятор заставляет не выполнять неявное преобразование?

1

Решение

Нет смысла выделять производный класс в его частный базовый класс. Просто подумайте на мгновение, что означает «частный». Это означает, что внешний мир не должен заботиться об этом. Разрешение нарезки (приведения) к частной базе означает, что внешний мир будет заботиться.

Если вы действительно хотите такое поведение (я хотел бы услышать ваши причины), вы можете взломать его:

class Base { };
struct Derived : private Base
{
Base asBase() { return static_cast<Base>(*this); }
};

Таким образом, приведение происходит внутри Derived, где Base доступна. Ошибка, которую вы получили от static_cast, заключается в том, что он использовался вне области действия Derived, где Base недоступен.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]