Re[3]: наследование или...
От: Glоbus Украина  
Дата: 09.08.04 14:39
Оценка:
Здравствуйте, Oleg A. Bachin, Вы писали:

OAB>Здравствуйте, Glоbus, Вы писали:


OAB>
OAB>>>    bool operator == (const T &other) const
OAB>>>    {
OAB>>>      if (this.is_null || other.is_null) 
OAB>>>        throw null_value_compare("null_value_compare");
OAB>>>      // 1. проверка типов

OAB>>>      // 2. что возвращать?
G>>          [/b]return *this = _other; //может так[/b]
OAB>>>    };
OAB>>>


OAB>не похоже... скорее

OAB>
OAB>  return T(this) == other;
OAB>

OAB>но я не уверен на сколько это корректно...

Не корректо. Ты указатель приводишь к типу Т (например к double).Чтобы получить занчение будь добр запиши тогда уж *this — или я чего-то не понимаю?


G>>Хм.... наверное еще должно пугать отсутсвие у класса T контрсуктора по умолчанию и приватные конструкторы/деструкторы


OAB>повторюсь, планируется использовать с простыми типами. так что эти ограничения оставим.


Может тогда можно не наследованием, а включением организовать все это
Типа

template <typename T>
class nullable
{
public:

    nullable(): is_null_(true) {};
    nullable(const T &other): is_null_(false), m_Value(other) {};

    bool & is_null() const 
    {
        return is_null_;
    }

    bool operator == (const T &other) const
    {
        if (this.is_null || other.is_null) 
            throw std::logic_error("null_value_compare");
        return m_Value == T

    }

    operator T ()
    {
        return m_Value;
    }
private:
    bool is_null_;
    T m_Value;
};
Удачи тебе, браток!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.