[C++] Перегрузка ?:
От: _nn_ www.nemerleweb.com
Дата: 03.08.04 08:28
Оценка:
Почему нельзя перегружать этот оператор ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [C++] Перегрузка ?:
От: Кодт Россия  
Дата: 03.08.04 08:33
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему нельзя перегружать этот оператор ?


А зачем?
Что за хитрую конструкцию ты затеял, где эта перегрузка потребовалась?
Перекуём баги на фичи!
Re[2]: [C++] Перегрузка ?:
От: _nn_ www.nemerleweb.com
Дата: 03.08.04 09:05
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, _nn_, Вы писали:


__>>Почему нельзя перегружать этот оператор ?


К>А зачем?

К>Что за хитрую конструкцию ты затеял, где эта перегрузка потребовалась?

Вообще-то вопрос был про то почему не дали возможность перегружать этот оператор ?
А насчет применений, придумаем
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [C++] Перегрузка ?:
От: LaptevVV Россия  
Дата: 03.08.04 09:18
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему нельзя перегружать этот оператор ?

Может быть — просто синтаксические трудности с выделением соответствующих частей. Если помотришь на остальные операторы, то они "компактные", а этот — "распределенный". И выражений аж три, а в остальных — либо 1, либо 2.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: [C++] Перегрузка ?:
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.08.04 10:43
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему нельзя перегружать этот оператор ?

По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: [C++] Перегрузка ?:
От: Кодт Россия  
Дата: 03.08.04 10:46
Оценка: :)))
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, _nn_, Вы писали:


__>>Почему нельзя перегружать этот оператор ?

S>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.

Вот как раз оператор "," перегружается на раз.
Правда, делают это извращенцы (имхо)...

К тому же, if,for,while,switch — это ключевые слова стейтментов, а не операторы.
Перекуём баги на фичи!
Re[3]: [C++] Перегрузка ?:
От: Leonid V. Volnin Россия  
Дата: 03.08.04 11:01
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Sinclair, Вы писали:


S>>Здравствуйте, _nn_, Вы писали:


__>>>Почему нельзя перегружать этот оператор ?

S>>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.

К>Вот как раз оператор "," перегружается на раз.

К>Правда, делают это извращенцы (имхо)...

К>К тому же, if,for,while,switch — это ключевые слова стейтментов, а не операторы.


нну, слова new, delete тоже ключевые. однако перегружаются себе и ничего .
best regards, Leonid
Re[3]: [C++] Перегрузка ?:
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.08.04 11:03
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Вот как раз оператор "," перегружается на раз.
К> Век живи — век учись... За...чем?
К>Правда, делают это извращенцы (имхо)...
Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: [C++] Перегрузка ?:
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 03.08.04 11:06
Оценка:
Здравствуйте, _nn_, Вы писали:

__>А насчет применений, придумаем


Мне кажеться, что двигаться надо как раз от противного. Разрешать только то, без чего нет жизни...
Re[4]: [C++] Перегрузка ?:
От: Sergey J. A. Беларусь  
Дата: 03.08.04 11:12
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

__>>>>Почему нельзя перегружать этот оператор ?

S>>>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.

К>>Вот как раз оператор "," перегружается на раз.

К>>Правда, делают это извращенцы (имхо)...

К>>К тому же, if,for,while,switch — это ключевые слова стейтментов, а не операторы.


LVV>нну, слова new, delete тоже ключевые. однако перегружаются себе и ничего .


Перегружаются operator new и operator delete, а не new и delete. Есть разница.
В двух словах — new вызывает operator new для выделения памяти, а потом вызывает конструктор.
Я — свихнувшееся сознание Джо.
Re[4]: [C++] Перегрузка ?:
От: jazzer Россия Skype: enerjazzer
Дата: 03.08.04 11:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Кодт, Вы писали:

К>>Вот как раз оператор "," перегружается на раз.
К>>:wow: Век живи — век учись... За...чем?
К>>Правда, делают это извращенцы (имхо)...
S>Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?

так она и так второе возвращает :)

обычно вкладывают такой же смысл, какой вкладывается в перегруженный operator<<, из которого можно делать цепочки: согласись, цепочка запятых смотрится куда естественнее
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: [C++] Перегрузка ?:
От: Кодт Россия  
Дата: 03.08.04 11:17
Оценка: 8 (6)
Здравствуйте, Sinclair, Вы писали:

К>>Вот как раз оператор "," перегружается на раз.

К>> Век живи — век учись... За...чем?
К>>Правда, делают это извращенцы (имхо)...
S>Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?

Например, упаковку кортежа для передачи в функцию с переменным числом параметров.
strint output = formatter("%1 %2 %3 %4!"),"oh","beautiful","new","world";

где
class formatter
{
  string format_;
  mutable vector<string> args_; // можно сделать без mutable - но там будут песни и пляски
public:
  formatter(const strign& format) : format_(format) {}

  operator string() const { ..... } // в общем, что-то там делает

  template<class T>
  const formatter& operator,(const T& v) const { append(v); return *this; }

  void append(const string& s) const { args_.push_back(s); }
  // и прочие типы
};

Хотя это не добавляет читаемости.
Уж лучше перегрузить оператор <<, &, % (как, например, в Qt).
Перекуём баги на фичи!
Re[4]: [C++] Перегрузка ?:
От: PM  
Дата: 03.08.04 11:30
Оценка: 4 (3)
Здраствуйте, Sinclair, Вы писали:

S> Здравствуйте, Кодт, Вы писали:

К>> Вот как раз оператор "," перегружается на раз.
К>> Век живи — век учись... За...чем?
К>> Правда, делают это извращенцы (имхо)...
S> Ага. Интересно, какой такой великий смысл можно вложить в перегрузку
S> запятой? Сделать ее возвращающей второе значение, а не первое?

Если есть возможность, можно и смысл вложить
class Date
{
  public:
    int year;
    int month;
    int day;

    static void describe(descriptor<Date>& class_)
    {
        class_("Date")
        [
            member(&Date::year,  "year" ),        // <- вот он, operator ,
            member(&Date::month, "month"),    // и здесь
            member(&Date::day,   "day"  )        // и здесь
        ];
    }
};

Взято из проекта "Visitor-based framework to describe classes". Проскакивало как-то на lists.boost.org
Насколько я понимаю, здесь operator , используется для создания аргумента для operator[].
foobar2000 v0.8.2: выключен.
Re[3]: [C++] Перегрузка ?:
От: WolfHound  
Дата: 03.08.04 11:56
Оценка: 1 (1)
Здравствуйте, Кодт, Вы писали:

К>Вот как раз оператор "," перегружается на раз.

К>Правда, делают это извращенцы (имхо)...
Ну operator, еиднственная функция в С++ которая может принимать void, а это может иногда оказаться полезным.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: [C++] Перегрузка ?:
От: _nn_ www.nemerleweb.com
Дата: 03.08.04 13:54
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, _nn_, Вы писали:


__>>А насчет применений, придумаем


M>Мне кажеться, что двигаться надо как раз от противного. Разрешать только то, без чего нет жизни...

Может кому-то нет жизни без этого
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: [C++] Перегрузка ?:
От: korzhik Россия  
Дата: 03.08.04 13:58
Оценка: 2 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Кодт, Вы писали:


К>>Вот как раз оператор "," перегружается на раз.

К>>Правда, делают это извращенцы (имхо)...
WH>Ну operator, еиднственная функция в С++ которая может принимать void, а это может иногда оказаться полезным.

здесь
Автор: folk
Дата: 19.04.04
например
Re[3]: [C++] Перегрузка ?:
От: Vladimir_K  
Дата: 03.08.04 15:40
Оценка: 58 (2)
Здравствуйте, Кодт, Вы писали:

__>>>Почему нельзя перегружать этот оператор ?

S>>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.
К>Вот как раз оператор "," перегружается на раз.
К>Правда, делают это извращенцы (имхо)...

Ну зачем же так всех под одну гребенку. Вот, например, здесь можно найти вполне оправданную перегрузку оператора запятая.
http://www.intelib.org/
Re[4]: [C++] Перегрузка ?:
От: Кодт Россия  
Дата: 03.08.04 15:56
Оценка: +1
Здравствуйте, Vladimir_K, Вы писали:

V_K>Ну зачем же так всех под одну гребенку. Вот, например, здесь можно найти вполне оправданную перегрузку оператора запятая.

V_K>http://www.intelib.org/

Извращенцы, в самом лучшем смысле этого слова !
Нужно подумать, куда это можно будет присобачить...
Перекуём баги на фичи!
Re: [C++] Перегрузка ?:
От: achp  
Дата: 03.08.04 16:09
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Почему нельзя перегружать этот оператор ?


Как нельзя? Ты только что это сделал!

PS. Представляю себе, как формулировались бы правила по выбору нужной сигнатуры среди всех доступных...
Re[5]: [C++] Перегрузка ?:
От: LaptevVV Россия  
Дата: 04.08.04 07:50
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Например, упаковку кортежа для передачи в функцию с переменным числом параметров.

К>
К>strint output = formatter("%1 %2 %3 %4!"),"oh","beautiful","new","world";
К>

К>где
К>
К>class formatter
К>{
К>  string format_;
К>  mutable vector<string> args_; // можно сделать без mutable - но там будут песни и пляски
К>public:
К>  formatter(const strign& format) : format_(format) {}

К>  operator string() const { ..... } // в общем, что-то там делает

К>  template<class T>
К>  const formatter& operator,(const T& v) const { append(v); return *this; }

К>  void append(const string& s) const { args_.push_back(s); }
К>  // и прочие типы
К>};
К>

Я подозревал, что так и можно сделать, но никогда реально не пробовал. Класс!
Кодт, какие "песни и пляски" имеются ввиду? Если formatter объявят const?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.