我想创建一个类来将辅助数据存储在任意对象中 - 这样做的干净方法是什么?
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>
}
};
答案 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(){
}
};
如果您在编译时不知道,即它取决于用户输入,那么union
或boost::any
(由@chris提出)是解决方案。