这里是一个示例代码:
class Base { public: virtual void common(); }; class Derived { public: void common(); virtual void spec(); // added function specific for this class }; class BaseTracker { public: void add(Base* p); private: vector < Base* > vec; }; class DerivedTracker { public: void add(Derived* p); private: vector < Derived* > vec; };
我希望 DerivedTracker 和 BaseTracker 从 Tracker 类派生,因为这两个类的很多代码都是相同的,除了一个方法 add() 之外。 DerivedTracker::add() 方法需要调用 Derived 类特定的函数。但我不想进行动态类型转换。我认为我不应该使用它。另外Tracker类应该包含容器,因此该类中实现的函数可以使用它。
最佳答案
听起来 Tracker 类最好是一个模板,而不是从共同的祖先派生:
template<typename Element>
class Tracker {
public:
void add(Element* p);
private:
vector< Element* > vec;
};
typedef Tracker<Base> BaseTracker;
typedef Tracker<Derived> DerivedTracker;
然后,您可以添加使用 Derived
特殊功能的 add()
方法的特化:
template<>
void Tracker<Derived>::add(Derived* p) {
p->spec();
vec.push_back(p);
}
关于c++ - 派生类的方法需要向下转换其参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2168446/