у меня есть подталкивание :: вариант типов, таких как:Как получить удерживаемую вариант типа, а также определить новые переменные этого типа
typedef boost::variant< uint8_t, int8_t, uint16_t, int16_t,
uint32_t, int32_t, float, double, std::string > StorageTt;
А StorageTt
переменной, скажем val
, установлен на одном из них типы хранилищ позже в моем коде. Я хотел бы получить тип, который в настоящее время содержит val
, чтобы определить больше переменных того же типа. Так что, если val
в настоящее время uint16_t
, я хочу сделать что-то вроде:
typedef decltype(typeid(val)) StorageTt;
StorageT new_val = 32.0; // new_val should be a uint16_t
, но это дает константный type_info типа. Я знаю, что я могу сделать:
switch (val.which()) {
case 0: // uint8_t
case 1: //...
но я предпочел бы избежать длительного заявления случая, потому что я должен сделать это несколько раз.
«Как получить текущий тип варианта и определить новые переменные ** этого типа **» –
В соответствии с образцом кода в вопросе, он попросил вариант того же типа, и конструктор копирования делает именно это , – egur
нет, присвоив '32.0'' new_val', вы меняете свой удерживаемый тип на 'double', а OP запрашивает' uint16_t' (что невозможно fyi). –