Здравствуйте, 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;
};