Re: Выбор типа во время выполнения
От: _agg  
Дата: 15.07.24 09:37
Оценка:
Здравствуйте, _agg, Вы писали:

_>Всем привет, возник вопрос существует ли какой-нибудь прием что бы осуществить следующее:

_>
_>enum class Type {int_, double_, string_};

_>struct Value {
_>    Type type;
_>    std::vector<uint8_t> v;
_>};
_>


_>Есть вот такое Value указанное выше, соответственно в векторе v находится значение в байтах, так же в type находится маркер типа, как то можно исхитрится написать какой-то метод или шаблонный класс, что бы в метод получения значения подаешь экземпляр Value и получаешь значение нужного типа

_>к примеру:
_>
_>auto val = GetValue(value);
_>


_>и соответственно если value.type = Type::int_ val будет типа int и тд. ?



Напрашивается что то вроде:
template<Type type> class GetValue {
public:
    typedef int Result;
    Result operator()(Value& val) {
        return *(int*)val.v.data();
    }
};

template<> class GetValue<Type::double_> {
public:
    typedef double Result;
    Result operator()(Value& val) {
        return *(double*)val.v.data();
    }
};

template<> class GetValue<Type::string_> {
public:
    typedef std::string Result;
    Result operator()(Value& val) {
        return (char*)val.v.data();
    }
};


используем:
    auto res = GetValue<Type::int_>{}(v1);


а нужно:

    auto res = GetValue<v1.type>{}(v1);


любые предложения...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.