【问题标题】:Method of derived class needs to downcast its parameter派生类的方法需要向下转换其参数
【发布时间】:2011-01-11 05:24:42
【问题描述】:

这是一个示例代码:

类基{ 民众: 虚空共同(); }; 类派生{ 民众: 无效共同(); 虚拟无效规范(); // 添加特定于该类的函数 }; 类 BaseTracker { 民众: 无效添加(基础* p); 私人的: 向量 &lt Base* &gt vec; }; 类派生跟踪器 { 民众: 无效添加(派生* p); 私人的: 向量 &lt Derived* &gt vec; };

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    听起来 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多