关于C++:派生类方法需要降低其参数


Method of derived class needs to downcast its parameter

以下是示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 &lt Base* &gt vec;
};

class DerivedTracker {
public:
    void add(Derived* p);
private:
    vector &lt Derived* &gt vec;
};

我希望从类跟踪程序派生DerivedTracker和BaseTracker,因为这两个类的许多代码是相同的,除了一个方法add()。derivedTracker::add()方法需要调用特定于派生类的函数。但我不想做动态铸造。我认为我应该使用它的时候不是这样。另外,跟踪器类应该包括容器,所以在这个类中实现的函数可以使用它。


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

1
2
3
4
5
6
7
8
9
10
template<typename Element>
class Tracker {
public:
   void add(Element* p);
private:
   vector< Element* > vec;
};

typedef Tracker<Base> BaseTracker;
typedef Tracker<Derived> DerivedTracker;

然后可以添加使用Derived的特殊特性的add()方法的专门化:

1
2
3
4
5
template<>
void Tracker<Derived>::add(Derived* p) {
  p->spec();
  vec.push_back(p);
}