C ++类中的任意数据类型

时间:2012-07-23 17:54:23

标签: c++ polymorphism

我想创建一个类来将辅助数据存储在任意对象中 - 这样做的干净方法是什么?

class A{
    std::string _name;
    int _val;
    void * _extraData;

    //I want to implement these methods
    void setExtraData(void * data){
        //
    }   

    void * getExtraData(){
    }   
};


class B{
    std::vector<A *> v;

    void foo(){
        //use A here - _extraData will      
        //be a (say) a vector<int>
    }
};

2 个答案:

答案 0 :(得分:7)

如果您有一组已知类型,我会从boost::variant开始,如果没有,我会以boost::any开头。您始终可以评估您的设计,并查看具有抽象接口的多态性是否也可以解决您的问题(有时它没有帮助)。关于你试图解决的真正问题的更多细节可以帮助获得更好的答案。

答案 1 :(得分:0)

模板,如果您在编译时知道将使用哪种数据类型:

template typename T
class A{
  std::string _name;
  int _val;
  T _extraData;

  void setExtraData(T data){
  }   

  T getExtraData(){
  }   
};

class B{
  std::vector<A<int> *> v;
  void foo(){
  }
};

如果您在编译时不知道,即它取决于用户输入,那么unionboost::any(由@chris提出)是解决方案。