| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > перегрузить оператор вывода в строку |
| Автор: boostcoder 3.4.2011, 12:35 | ||
| всем доброго дня. есть надобность выводить не в поток вывода, а в строку. обычно вывожу в std::stringstream и методом str() получаю строку. но мне интересно, а что можно сделать, чтоб не перегружать операторы вывода для каждого типа? чтоб использовать так:
какие варианты есть? спасибо |
| Автор: mes 3.4.2011, 12:49 | ||
решение в лоб :
http://liveworkspace.org/code/6ee83fd38547e246f6351f77f387a06a |
| Автор: boostcoder 3.4.2011, 12:56 | ||
| mes, спасибо. я рассматривал такой вариант, но почему-то подумал что оператор вывода в таком случае должен возвращать stringstream& и недодумал.. поспешил с вопросом. вопрос закрыт. Добавлено @ 12:58 mes, еще такой вопрос. не понимаю, что в следующем коде не так?..
http://liveworkspace.org/code/d1e3007290cd785b083cfc64321da742 Добавлено @ 13:00 ведь результат выражения "std::string() << "ab, " << 23 << ", " << 3.14159265" - строка |
| Автор: mes 3.4.2011, 13:02 |
грубо : rvalue не может быть присвоена не константной ссылке.. http://liveworkspace.org/code/ed9df98b42272d53cbfa22f845980c07 Добавлено через 46 секунд а зря, не очень удачное решение.. |
| Автор: boostcoder 3.4.2011, 13:04 |
что с этим решением не так? есть варианты получше? ;) |
| Автор: mes 3.4.2011, 13:05 |
для получше надо подумать.. но должно быть.. |
| Автор: mes 3.4.2011, 17:49 | ||
| вот так имхо по-безопасней, да и по логичней будет : http://liveworkspace.org/code/d8dde9cde2392a2ee30fa2072feebc34
|
| Автор: boostcoder 3.4.2011, 17:57 |
эм... как-то смущает.. |
| Автор: mes 3.4.2011, 18:01 |
a какой оператор лучше отражает концепцию concat ? |
| Автор: boostcoder 3.4.2011, 18:02 |
оператор вывода. |
| Автор: mes 3.4.2011, 18:04 |
<< ? так посмотрите на действие функции.. она не делает _вывода_ |
| Автор: mes 3.4.2011, 18:58 | ||
Добавлено @ 18:59 вместо && можно & или , если удобнее.. |
| Автор: boostcoder 3.4.2011, 19:00 |
она делает вывод в строку |
| Автор: mes 3.4.2011, 19:06 |
нет, она возвращает новую строку, как результат объединения/слияния двух аргументов.. Добавлено через 43 секунды первоначальная строка остается неизмененной.. Добавлено через 4 минуты и 57 секунд именно возвращение ссылки в первоначальном коде и было слабым местом реализации .. |
| Автор: mes 3.4.2011, 19:20 | ||||
ну это не признак хорошести.. тем более у меня большое сомнение, что этот первый вопрос отражает действительную проблему, ради которой была создана тема Добавлено @ 19:22 тем более что второй вопрос оправдывает мои сомнения
|
| Автор: boostcoder 3.4.2011, 19:24 | ||
ну да. но как результат - получаем что нужно. |
| Автор: volatile 3.4.2011, 19:28 |
| Ну в принципе можно оставить оба, они друг другу не мешают Но все же первый я возьму себе в копилку. |
| Автор: mes 3.4.2011, 19:44 |
оно разное и пример с print _подверждает_ это.. только осторожней |
| Автор: boostcoder 3.4.2011, 19:49 |
что разное? не въезжаю... |
| Автор: mes 3.4.2011, 19:58 | ||
в случае 1 : rvalue записывается в lvalue str в случае 2: из двух rvalue получается третья rvalue ну и соответственно разные применение и требования.. |
| Автор: boostcoder 8.4.2011, 21:13 | ||
реализовал так:
http://liveworkspace.org/code/f43be67a24747f1c7750755644358655 всем спасибо. |
| Автор: mes 8.4.2011, 22:52 |
вот вроде то же самое, но меньше строчек кода : http://liveworkspace.org/code/e5e3276a6674547631f19c76e6a91b7d |
| Автор: boostcoder 8.4.2011, 22:55 |
| mes, да, это получше будет. и по быстрее. спасибо |
| Автор: mes 8.4.2011, 23:14 | ||
ну оптимизации то там как таковой и не было, просто выкинил все лишнее, что Вы туда впихнули |
| Автор: boostcoder 8.4.2011, 23:19 |
| кода меньше + результат тот же = оптимизация. по любому ;) |
| Автор: mes 9.4.2011, 15:26 |
как по мне, то устранение_пессимизации и оптимизация разные хотя и смежные понятия.. но в любом случае это не тема для спора |
| Автор: boostcoder 8.5.2011, 19:22 | ||
| попробовал скомпилить код с отключенной отладкой, и улыбнулся. все что после закрывающейся скобки макроса, остается ведь
нужно и аргументы в макрос писать. а для этого нужен variadic_macros. разбираюсь... |
| Автор: mes 9.5.2011, 00:49 |
а если так : http://liveworkspace.org/code/85de8371fccd890758001c0d182d26ba ? |