hell0w0rd
@hell0w0rd
Просто разработчик

Реализация динамической типизации в c++?

Подскажите пожалуйста, как такое реализовать?
class Variable
{
private:
    int type;
    union Value {
        char sign;
        int num;
    } value;
public:
    static const int SIGN = 1;
    static const int NUM = 2;
    Variable(char val)
    {
        type = SIGN;
        value.sign = val;
    }
    Variable(int val)
    {
        type = NUM;
        value.num = val;
    }

    Value get()
    {
        return value;
    }
};


Вот что я накидал, только никак не могу въехать как мне возвращать не union, а конкретно данные? Или подобное невозможно?
  • Вопрос задан
  • 5073 просмотра
Решения вопроса 1
gaelpa
@gaelpa
Можно перегрузить операторы приведения типов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AxisPod
@AxisPod
Посмотрите в сторону boost::any и boost::variant, могу дать реализацию очень близкую к boost::any, но без boost.
Ответ написан
turboNOMAD
@turboNOMAD
На шаблонах можно. Но вы же понимаете, что члены union находятся в одном месте в памяти и работать одновременно более чем с одним нельзя?
template<typename T> Variable::get()
{
  return (T)value;
}

template<> Variable::get<int>()
{
  return value.num;
}

template<> Variable::get<char>()
{
  return value.sign;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы