Блок задач

8. Чёрные ящики

Темы
Сложность 4

Задача «Variant»

Задача

Реализовать класс Varaint, который может хранить в себе значение различных типов: int, float, double, std::string, char, bool. Аналог QVariant (http://qtdocs.narod.ru/4.1.0/doc/html/qvariant.html)

Для каждого из типов должен быть следующие методы (на примере int):

class Variant() {    
public:
    ...
    Variant(int val); // конструктор
    void SetValue(int val); // выставить значение
    int ToInt(bool* res) const; // Привести значение к int. res - true, если приведение возможно.
    ...
};

Общие методы:

class Variant() {    
public:
    enum Type = {t_int, t_double ... };
    bool CanConvert(Type t) const; //возвращает true, если можно привести к данному типу
    bool operator!= ( const Variant & v ) const;    
    bool operator!= ( const Variant & v ) const;
    Variant & operator= ( const Variant & variant );
};

Также нужно реализовать операторы ввода/ вывода в поток.