C++ uygulamasında, bir dizeyi rasgele bir türle ilişkilendirmeme olanak tanıyan bir istatistik sistemi oluşturmaya çalışıyorum. Şu anda, bu tür bir enum
ile çalışan ve bu nesneyi işaret eden bir void *
çalışıyorum var, ancak bu desteklemek istediğim tüm türleri için bireysel if
ifadeleri yapmak gerekir. Bir çeşit şablon kullanarak herhangi bir keyfi türü destekleyebilmem için sahip olmak isterim. Ben bazı test kodu işlerin bu tür oluşturduk fakat sorunlar vardır:Nesne, türü ile ilişkilendirme
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();
}
}
};
/hamle kurucular . Bütün bir nokta, hepsini tek bir std::unordered_map
içinde saklamak istiyorum, bu yüzden (AFAIK) bir şablon sınıfı yapıp oradan gidemem. Yani, yapmaya çalıştığım şeyi yapmak mümkün mü ve eğer öyleyse, nasıl yaparım?
saklar. – CodeMouse92
Takviye ihtiyacınız var gibi görünüyor: variant. –
"Boost :: any" aradığınız görünüyor. Genellikle gerçekten bir varyantı istiyorsun ('boost :: variant'). – GManNickG