Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, _nn_, Вы писали:
__>>Почему нельзя перегружать этот оператор ?
К>А зачем? К>Что за хитрую конструкцию ты затеял, где эта перегрузка потребовалась?
Вообще-то вопрос был про то почему не дали возможность перегружать этот оператор ?
А насчет применений, придумаем
Здравствуйте, _nn_, Вы писали:
__>Почему нельзя перегружать этот оператор ?
Может быть — просто синтаксические трудности с выделением соответствующих частей. Если помотришь на остальные операторы, то они "компактные", а этот — "распределенный". И выражений аж три, а в остальных — либо 1, либо 2.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, _nn_, Вы писали:
__>Почему нельзя перегружать этот оператор ?
По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, _nn_, Вы писали:
__>>Почему нельзя перегружать этот оператор ? S>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.
Вот как раз оператор "," перегружается на раз.
Правда, делают это извращенцы (имхо)...
К тому же, if,for,while,switch — это ключевые слова стейтментов, а не операторы.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, _nn_, Вы писали:
__>>>Почему нельзя перегружать этот оператор ? S>>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch.
К>Вот как раз оператор "," перегружается на раз. К>Правда, делают это извращенцы (имхо)...
К>К тому же, if,for,while,switch — это ключевые слова стейтментов, а не операторы.
нну, слова new, delete тоже ключевые. однако перегружаются себе и ничего .
Здравствуйте, Кодт, Вы писали: К>Вот как раз оператор "," перегружается на раз. К> Век живи — век учись... За...чем? К>Правда, делают это извращенцы (имхо)...
Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, 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 для выделения памяти, а потом вызывает конструктор.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Кодт, Вы писали: К>>Вот как раз оператор "," перегружается на раз. К>>:wow: Век живи — век учись... За...чем? К>>Правда, делают это извращенцы (имхо)... S>Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?
так она и так второе возвращает :)
обычно вкладывают такой же смысл, какой вкладывается в перегруженный operator<<, из которого можно делать цепочки: согласись, цепочка запятых смотрится куда естественнее
Здравствуйте, Sinclair, Вы писали:
К>>Вот как раз оператор "," перегружается на раз. К>> Век живи — век учись... За...чем? К>>Правда, делают это извращенцы (имхо)... S>Ага. Интересно, какой такой великий смысл можно вложить в перегрузку запятой? Сделать ее возвращающей второе значение, а не первое?
Например, упаковку кортежа для передачи в функцию с переменным числом параметров.
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).
Здраствуйте, 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[].
Здравствуйте, Кодт, Вы писали:
К>Вот как раз оператор "," перегружается на раз. К>Правда, делают это извращенцы (имхо)...
Ну operator, еиднственная функция в С++ которая может принимать void, а это может иногда оказаться полезным.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, _nn_, Вы писали:
__>>А насчет применений, придумаем
M>Мне кажеться, что двигаться надо как раз от противного. Разрешать только то, без чего нет жизни...
Может кому-то нет жизни без этого
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Кодт, Вы писали:
К>>Вот как раз оператор "," перегружается на раз. К>>Правда, делают это извращенцы (имхо)... WH>Ну operator, еиднственная функция в С++ которая может принимать void, а это может иногда оказаться полезным.
Здравствуйте, Кодт, Вы писали:
__>>>Почему нельзя перегружать этот оператор ? S>>По тем же причинам, что нельзя перегрузить запятую и точку с запятой. А также whitespace, операторы if, for, while, switch. К>Вот как раз оператор "," перегружается на раз. К>Правда, делают это извращенцы (имхо)...
Ну зачем же так всех под одну гребенку. Вот, например, здесь можно найти вполне оправданную перегрузку оператора запятая. http://www.intelib.org/
Здравствуйте, Vladimir_K, Вы писали:
V_K>Ну зачем же так всех под одну гребенку. Вот, например, здесь можно найти вполне оправданную перегрузку оператора запятая. V_K>http://www.intelib.org/
Извращенцы, в самом лучшем смысле этого слова !
Нужно подумать, куда это можно будет присобачить...
К>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?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!