c++ - 派生类的方法需要向下转换其参数

标签 c++

这里是一个示例代码:

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/

相关文章:

c++ - 有一个没有构造函数的类有意义吗?

C++使用多态数据成员的最佳实践模式

c++ - 如何在ARM Cortex-M芯片上使用STL?

C++ const 成员函数返回一个指针

c++ - 在 std::uint8_t 中移位

c++ - 如何确保所有 async_handler 在 boost::asio 停止之前完成?

c++ - Ubuntu SDL程序

C++ directory_iterator

c++ - 检查类是否派生自模板类

c++ - 从 std::vector 的开头移除