Почему разделение объектов не происходит в частном наследовании? Static_cast выдает ошибку в таких случаях?
Я понимаю, что частное наследование не содержит отношения «есть -» между его классами наследования. Имеет ли это какое-то отношение к нарезке, так как производная не имеет типа базы, поэтому компилятор заставляет не выполнять неявное преобразование?
Нет смысла выделять производный класс в его частный базовый класс. Просто подумайте на мгновение, что означает «частный». Это означает, что внешний мир не должен заботиться об этом. Разрешение нарезки (приведения) к частной базе означает, что внешний мир будет заботиться.
Если вы действительно хотите такое поведение (я хотел бы услышать ваши причины), вы можете взломать его:
class Base { };
struct Derived : private Base
{
Base asBase() { return static_cast<Base>(*this); }
};
Таким образом, приведение происходит внутри Derived, где Base доступна. Ошибка, которую вы получили от static_cast, заключается в том, что он использовался вне области действия Derived, где Base недоступен.
Других решений пока нет …