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(){
  }
};

コンパイル時にわからない場合、つまり、たとえばユーザー入力に依存する場合は、unionor boost::any(@chris によって提案されている) が解決策です。

于 2012-07-23T18:07:14.923 に答える