私の変数データでは、「変数を追加」スクリプト コードを実行するときに、すべての型の汎用コンテナーを定義する方法を教えてください。そして、それらにアクセスするための一般的な式は何ですか? 各型 (int float double など) ごとにベクトル テンプレートを定義する必要があるため、面倒です。私の変数には、int、float、double などの一般的なベクター オブジェクトのみを含める必要があります。それは可能ですか? 何か案が?
3 に答える
編集:
ああ、あなたはどんなタイプにも合うことができる容器が欲しいですか?はい、できます。しかし、特定の制限の範囲内です。
boost::anyおよびを参照してくださいboost::variant。を宣言するときに列挙されたいくつかのタイプboost::variantのデータを保存できるようになります。サポートしたいすべてのタイプを列挙するわけではありませんが、自分で値を取り戻すには、それらをキャストする必要があります。 boost::variantboost::any
つまり、タイプ情報を別の場所に格納するか(を使用する場合boost::any)、またはいくつかのタイプをサポートする必要があります(たとえば、をサポートintしてdouble使用する異種ベクトルboost::variant)
templateC ++では、すべての型に同じクラスを記述する必要がなくなるため、正確に機能します。例えば:
// function template
template <class T>
T GetMax (T a, T b) {
T result;
result = (a>b)? a : b;
return (result);
}
これは、演算子GetMaxを持つすべてのタイプで機能するはずです。>これがまさにtemplateC++の目的です。
C ++でのベクトルの実装についてさらにヘルプが必要な場合(ちなみに、独自のコンストラクタとデストラクタを持つカスタム型に関してはそれほど単純ではありません。allocator初期化されていないスペースを取得する必要がある場合があります)、これを読んでください(C ++でのVectorの実装)。
多くの異なるタイプのオブジェクトを含む単一のベクトルが必要な場合はboost::any、 、または場合によっては を使用することができますboost::variant。
それが標準テンプレート ライブラリの要点です ..
std::vector<int>
std::vector<float>
2 つのベクトル - 異なる型でテンプレート化された同じクラス。
異なるタイプのコンテナが必要な場合は、以下を参照してくださいstd::tuple