派生类的方法需要下调其参数

Iva*_*yan 1 c++

这是一个示例代码:

班级基础{
上市:
    虚拟void common();
};

类派生{
上市:
    void common();
    虚拟void spec(); //添加了特定于此类的函数
};

BaseTracker类{
上市:
    void add(Base * p);
私人的:
    向量<Base *> vec;
};

类DerivedTracker {
上市:
    无效添加(派生* p);
私人的:
    向量<Derived *> vec;
};

我希望DerivedTracker和BaseTracker从Tracker类派生,因为这两个类的许多代码是相同的,除了一个方法add()。DerivedTracker :: add()方法需要调用特定于Derived类的函数。但是我不想做动态转换。我认为不是应该使用它的情况。Tracker类也应该包含容器,因此在该类中实现的功能可以使用它。

sth*_*sth 5

听起来Tracker类最好是一个模板,而不是从一个共同的祖先派生而来:

template<typename Element>
class Tracker {
public:
   void add(Element* p);
private:
   vector< Element* > vec;
};

typedef Tracker<Base> BaseTracker;
typedef Tracker<Derived> DerivedTracker;
Run Code Online (Sandbox Code Playgroud)

然后,您可以添加add()使用Derived特殊功能的方法的特殊化:

template<>
void Tracker<Derived>::add(Derived* p) {
  p->spec();
  vec.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)