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

C++ C+中的任意数据类型+;班,c++,polymorphism,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{

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

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>
    }
};
A类{
std::string _name;
国际价值;
无效*_额外数据;
//我想实现这些方法
void setExtraData(void*数据){
//
}   
void*getExtraData(){
}   
};
B类{
std::向量v;
void foo(){
//使用此处-\u额外数据将
//是(比如)向量
}
};

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

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

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(){
  }
};
模板类型名T
甲级{
std::string _name;
国际价值;
T_额外数据;
无效setExtraData(T数据){
}   
T getExtraData(){
}   
};
B类{
std::向量v;
void foo(){
}
};

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

…但是适当的缩进更好。@Mark谢谢-我实际上没有已知的类型集-这可能是任意的。其目的是要有一个比B类更干净的实现来维护a的每个实例的辅助数据。