Вопрос по классам. Не знаю как правильно сформулировать
От: r1der Россия  
Дата: 02.11.09 17:28
Оценка:
допустим создает поток ввода
ifstream fin("....
теперь мы можем проверять как открылся поток вот таким кодом
if (fin)
он эквивалентен
if (!fin.fail())
как сделать такой класс самому чтобы можно было проверят успешность чего либо без вызова какого либо метода просто
конструкцией
if(!объект_класса)

или может быть какой то дефайн сущевствует который заменяет if (fin) на if (!fin.fail())?
icq 314624
Re: Вопрос по классам. Не знаю как правильно сформулировать
От: Vamp Россия  
Дата: 02.11.09 17:39
Оценка:
R>как сделать такой класс самому чтобы можно было проверят успешность чего либо без вызова какого либо метода просто

В классе надо определить оператор приведения к bool, возвращающий true или false в зависимости от твоих условий.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Вопрос по классам. Не знаю как правильно сформулирова
От: Ведмедь Россия  
Дата: 02.11.09 18:15
Оценка: +4
Здравствуйте, Vamp, Вы писали:

R>>как сделать такой класс самому чтобы можно было проверят успешность чего либо без вызова какого либо метода просто


V>В классе надо определить оператор приведения к bool, возвращающий true или false в зависимости от твоих условий.


Любим мы разложить грабли. Работать будет, но я боюсь представить как может выстрелить такая экономия — на вскидку в логических выражениях.

А к топикастеру — чем не нравится !fin.fail() ? Я думаю тут не то место, где надо экономить на символах получая взамен потенциально опасный неявный вызов.
Да пребудет с тобой Великий Джа
Re[3]: Вопрос по классам. Не знаю как правильно сформулирова
От: Vamp Россия  
Дата: 02.11.09 18:42
Оценка: 1 (1)
В>Любим мы разложить грабли. Работать будет, но я боюсь представить как может выстрелить такая экономия — на вскидку в логических выражениях.
Это не мы, это стандартная библиотека — реализовано в классе ios

В>А к топикастеру — чем не нравится !fin.fail() ? Я думаю тут не то место, где надо экономить на символах получая взамен потенциально опасный неявный вызов.

Да ничем он не опасен. Соврешенно нормальная проверка, практически на естественном языке записанная.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Вопрос по классам. Не знаю как правильно сформулирова
От: zaufi Земля  
Дата: 02.11.09 18:54
Оценка:
Здравствуйте, Vamp, Вы писали:

В>>Любим мы разложить грабли. Работать будет, но я боюсь представить как может выстрелить такая экономия — на вскидку в логических выражениях.

V>Это не мы, это стандартная библиотека — реализовано в классе ios

В>>А к топикастеру — чем не нравится !fin.fail() ? Я думаю тут не то место, где надо экономить на символах получая взамен потенциально опасный неявный вызов.

V>Да ничем он не опасен. Соврешенно нормальная проверка, практически на естественном языке записанная.
так уж и ничем?
Re[2]: Вопрос по классам. Не знаю как правильно сформулирова
От: Centaur Россия  
Дата: 05.11.09 09:53
Оценка: +2
Здравствуйте, Vamp, Вы писали:

R>>как сделать такой класс самому чтобы можно было проверят успешность чего либо без вызова какого либо метода просто


V>В классе надо определить оператор приведения к bool, возвращающий true или false в зависимости от твоих условий.


Лучшие собаководы рекомендуют приводиться не к bool, но к unspecified-bool. Потому что bool умеет неявно продвигаться до int, что приводит к возможности писать бессмысленные выражения вида foo << 1 или int i = foo или if (foo == bar), где foo и bar — разных типов.

  class Testable {
    bool ok_;
    typedef void (Testable::*bool_type)() const;
    void this_type_does_not_support_comparisons() const {}
  public:
    explicit Testable(bool b=true):ok_(b) {}

    operator bool_type() const {
      return ok_==true ? 
        &Testable::this_type_does_not_support_comparisons : 0;
    }
  };
Re: Вопрос по классам. Не знаю как правильно сформулировать
От: rising_edge  
Дата: 06.11.09 11:59
Оценка: +1
Здравствуйте, r1der, Вы писали:

R>как сделать такой класс самому чтобы можно было проверят успешность чего либо без вызова какого либо метода просто

R>конструкцией
R>if(!объект_класса)

Переопределить оператор !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.