C++で統計システムを作成しようとしています。これは、文字列を任意の型の値と関連付けることができます。現在、私はenum
の型を追跡し、オブジェクトを指すvoid *
を使用していますが、これは私がサポートしたいすべてのタイプの個別のif
ステートメントを作成する必要があります。何らかのテンプレートを使用して任意のタイプをサポートできるようにしたいと思います。私はいくつかのテストコードに作品のようなものを作成しましたが、問題があります。オブジェクトを型に関連付ける方法
class Test {
std::type_index type;
void *value;
public:
template <typename T>
Test(T val) : type(typeid(val)) {
T *val_p = new T;
*val_p = val;
value = (void *)val;
}
Test() : type(typeid(void)) {
value = nullptr;
}
~Test() {
//no idea how I could make this work
}
template <typename T>
T get() {
if (std::type_index(typeid(T)) == type) {
T *val_p = (T *)value;
return *val_p;
} else {
throw std::bad_typeid();
}
}
};
は、私がこれまでの作品を持っている何が、私はデストラクタやコピー/移動コンストラクタを実装することが可能であろうとは思いません。要点は、これをすべて1つのstd::unordered_map
に保存したいので、(AFAIK)はテンプレートクラスを作成してそこから移動することはできません。それで、私がやろうとしていることをすることは可能ですか?もしそうなら、どうしたらいいですか?
を格納し、あなたがそれらの任意の種類を絞り込むことができた場合は、 'union'はあなたに有用である可能性があります。 – CodeMouse92
boost :: variantが必要なようです。 –
あなたは 'boost :: any'を探しているようです。通常、あなたは実際には( 'boost :: variant')でも変種が必要です。 – GManNickG