3

私は次のような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 :: string(またはint、double、または使用するように指示されたもの)を使用するようにdecide_laterを設定します。さらに、後でクラスのメンバーである他の関数で変数タイプとしてdecide_laterを使用できれば素晴らしいと思います。たとえば、関数some_random_function()で。

私はこれを行うためにboost::anyを使用しようとしましたが、数値タイプでのみ機能するようです。また、実際に変数の型を実際に設定できればもっと効率的だと思います。

これは可能ですか?

4

2 に答える 2

7

テンプレートを探しています。次のようにクラスを宣言します。

template <typename T> class some_class {

    protected:
        T some_variable;

    public:
        void some_random_function() {
            T another_variable;
        }

};

そしてそれをインスタンス化します:

some_class<std::string> class_instance();
于 2012-05-12T06:24:35.633 に答える
2

インスタンスを作成するときにタイプが静的にわかっている場合は、C ++テンプレートを使用して、タイプをテンプレートパラメーターにする必要があります。

動的にのみ(つまり、ユーザー入力に基づいて)わかっている場合は、分岐してさまざまなタイプのパラメーターを使用してテンプレートをインスタンス化するか、完全に動的なソリューション(boost :: anyまたは同等のものなど)を使用できます。

ただし、テンプレートでこれを実行できない場合は、プログラムの設計に問題があると思います。C ++静的型付けの考え方は、型はコンパイル時に認識されるということです。通常、オブジェクト指向設計では、弱い型付けの代わりにポリモーフィズムを使用します。

于 2012-05-12T06:24:49.917 に答える