Название говорит об этом.Parent
публично выставляет Grandparent
, и я хочу, чтобы это было публично в Child
, но я хочу скрыть сам Parent
.Я не понимаю, почему это невозможно, но я не могу найти способ использовать директиву using
для достижения этой цели.Если я смогу использовать using
для публичного предоставления приватно-унаследованных переменных-членов, я ожидаю, что смогу сделать то же самое для приватно-унаследованных баз, но не могу найти синтаксис для этого.Явный оператор преобразования в Child
может работать, но есть ли более чистый способ?
class Grandparent {};
class Parent: public Grandparent {};
class Child: Parent
{
// How can I expose Grandparent here publicly?
};
void takeGrandparent( Grandparent const & );
int main()
{
takeGrandparent( Child() ); // error: cannot cast 'Child' to its private base class 'Grandparent'
}
UPD: поскольку люди спрашивают, зачем мне это нужно, вот мой пример использования.Grandparent
- это интерфейс, который реализует Parent
.Я хочу, чтобы Child
использовал Parent
для реализации и предоставления этого интерфейса, но в остальном оставил Parent
закрытым.