наследование или...
От: Oleg A. Bachin Украина  
Дата: 09.08.04 12:14
Оценка:
Добрый день всем...

просьба не пинать сильно — только учусь...

вот решил попробовать написать простенький класс и ничего толком не получается.
идея такая — мне нужен простой тип с его поведением плюс еще одно свойство...

первое что пришло в голову — наследование (точнее это было второе, но с первым я совсем запутался...)

template <typename T>
class nullable: public T
{
  public:

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

    bool & is_null() const 
    {
      return is_null_;
    };

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

      // 2. что возвращать?
    };
  private:
    bool is_null_;
};

int main() 
{
  nullable<std::string> str = "std::string";
  std::cout << str.c_str() << std::endl;
}


отступление: за все лишние '&' и 'const' давайте сразу по рукам — еще не чувствую...

1. проверка типов я так понимаю это compile-time, но как здесь избежать авто-преобразования?
2. как вызвать оператор сравнения базового класса? явным преобразованием? static_cast?

больше всего пугает здесь наследование от простого типа, так что этот вариант наверное отпадает...

теперь первое, что пришло в голову — имплементация, но с ней еще хуже.
не могу понять, как добиться поведения, такого же как простой тип?
конечно, можно завести ф-цию, которая будет возвращать ссылку на T, но хотелось бы более дружественного поведения.
можно перегрузить оператор '()', но тогда прийдется делать преобразования (т.е. выглядеть будет так: std::string(str).c_str())...
Best regards,
Oleg A. Bachin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.