У меня есть базовый класс, который выглядит примерно так:
class Base
{
public:
typedef std::shared_ptr<Base> ptr_t;
typedef std::weak_ptr<Base> wptr_t;
enum class Type { foo, bar, baz };
Type x;
// ...
};
Я бы хотел, чтобы эти внутренние типы были общедоступными, чтобы я мог делать такие вещи, как Base::ptr_t my_ptr(new Base);
и так далее. Но если я сделаю новый класс, как этот ...
class Derived : public Base
{
// ...
};
к сожалению, Derived::ptr_t
по-прежнему является базовым указателем. Я бы хотел, чтобы Derived публично наследовал x
от Base, но не наследовал ptr_t
, wptr_t
или Type
. Например
Derived a;
a.x = Base::Type::foo; // this should work
a.x = Derived::Type::foo; // but I want this to fail
Возможно ли это, возможно, хоть какое-то магическое использование friend
или virtual
или что-то в этом роде?