2012-05-12 15 views
3

中のC++クラス変数の変数型を設定します。は、私は次のようなC++クラスを持つインスタンス化

class some_class { 

    protected: 
     decide_later some_variable; 

    public: 
     void some_random_function(); 

}; 

void some_class::some_random_function() { 

    decide_later another_variable; 

} 

問題は、私はインスタンスを作成するまで、私は変数の型some_variableがどうなるか分からないということですクラスの

some_class class_instance(std::string); 

そして、それがのstd ::文字列(またはint型、またはdouble、または何でも使用するように指示される)を使用するようにdecide_laterを設定します:私は何をしたい、次のようなものです。さらに、クラスのメンバーである他の関数で後で変数型としてdecide_laterを使うことができれば嬉しいです。たとえば、関数some_random_function()のようにします。

私はこれを行うためにboost :: anyを使ってみましたが、数値型に対してのみ動作するようです。また、実際の変数型を実際に設定できると効率的だと思います。

これは可能ですか?

答えて

7

テンプレートをお探しの場合

template <typename T> class some_class { 

    protected: 
     T some_variable; 

    public: 
     void some_random_function() { 
      T another_variable; 
     } 

}; 

し、それをインスタンス化:あなたのクラスは次のように宣言し、あなたがインスタンスを作成するとき、あなたはC++テンプレートを使用し、タイプにテンプレートパラメータをしなければならない静的タイプを知っている場合

some_class<std::string> class_instance(); 
2

動的にしかわからない場合(つまりユーザー入力に基づいている場合)は、異なる型パラメータを使用してテンプレートを分岐してインスタンス化することも、完全に動的な解決策(boost :: anyまたは同等のもの) 。

しかし、私はあなたがテンプレートでこれを行うことができない場合、あなたのプログラム設計に何か問題があると思います。 C++スタティック型の考え方は、コンパイル時に型が分かっていることです。通常、オブジェクト指向の設計では、弱い型定義の代わりに多態性を使用します。

関連する問題