2

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

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>
    }
};
4

2 回答 2

7

boost::variant如果你有一组已知的类型,我会开始boost::any。您总是可以评估您的设计,看看具有抽象接口的多态性是否也可以解决您的问题(有时它没有帮助)。有关您尝试解决的实际问题的更多详细信息可能有助于得出更好的答案。

于 2012-07-23T17:57:12.107 回答
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(){
  }
};

如果您在编译时不知道,即它取决于例如用户输入,那么 a unionor boost::any(如@chris 所建议)是解决方案。

于 2012-07-23T18:07:14.923 回答