公共成員,我有一個基類,它看起來是這樣的:沒有繼承
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從Base公開繼承x
,但不繼承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
或類似的東西?
既然你想讓指針類型匹配類的類型,我不禁想着你應該使用模板而不是繼承。 – MatthewD 2011-06-15 03:17:48
我希望指針類型匹配類的類型,但我也希望基類型存在,以便它可以用作基類型。如果有一個模板能夠自動獲得派生類型的指針typedefs,但是我還沒有想到用模板實現這個功能的簡單方法 - 所以我會滿足於將它們完全禁用(這基本上是這個問題的關鍵)。 – karadoc 2011-06-15 03:47:20