C ++如何最好地为具有类似数据的容器建模

时间:2016-10-25 20:42:50

标签: c++ oop

我是OOP / C ++的新手,正在努力应对一个看似简单的问题。 我有一个包含一些数据的类和一个带有一些附加数据的派生类。我希望这些类的对象在容器(特别是map)中,并且能够调用可以接受value_type的函数。 我发布了以下问题(thx for answers),这是第一次尝试,但我担心它过于复杂(例如需要大量的模板化函数,动态转换(请参阅下面的第一个链接答案),帖子说不要将原始指针存储在容器中,等)

Can I pass a reference to a map where the data is a pointer to a derived class?

相关: Inheritance in std::map with base class as value

我正在研究的另一种方法是使用不同的容器包装,如下所示。这感觉非常笨拙 - 例如我真的不想为'insert'这样的方法编写包装器。 该示例显示了一个容器的one_coord value_type和另一个容器的two_coord value_type。 关于如何建模的任何建议都表示赞赏。

#include <map>

// has a single coordinate value
class one_coord {

private:
  int coord_a_;

};

// has two coordinate values
class two_coord : public one_coord {
private:
  int coord_b_;
};

// a container with one_coord objects
class one_coord_map {

public:
  typedef one_coord value_type;
  // yuck:
  void insert(int k, value_type& v) { m_.insert(std::pair<int, value_type>(k, v) ); }
    // etc...
private:
  typedef std::map<int, value_type> pair_type;
    pair_type m_;

};

// a container with two_coord objects
class two_coord_map {

public:
  typedef two_coord value_type;
    // insert etc ??? 
private:
  typedef std::map<int, two_coord> pair_type;
  pair_type m_;

};

int main() {

  one_coord_map one_cm; 
  two_coord_map two_cm; 

  one_coord oc;

  one_cm.insert(0, oc); // just for example

  return 0;
}

最新的coord_map如下所示,但重做插入,擦除等不可能是正确的。

  template <typename T>
  class coord_map {
  public:
    typedef T value_type;
    void insert(int k, value_type& v) { m_.insert(std::pair<int, value_type>(k, v) ); }
    // etc...
  private:
    typedef std::map<int, value_type> pair_type;
    pair_type m_;
  };

0 个答案:

没有答案