Здравствуйте, _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);
любые предложения...