![]() |
|
Модераторы: bsa |
![]()
|
|
| neosapient |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Здравствуйте.
Допустим есть класс summator. Он получает параметры через перегруженный оператор <<, а затем суммирует их. Хочу сделать манипулятор calc, который бы производил расчет в момент его вызова. Помогите исправить ошибку. Пример, что хотелось бы получить sum << 1 << 2 << "3" << calc; Пример не рабочего кода
Сообщение об ошибке, которое возникает при обращении к манипулятору sum << summator::calc; в строке 38
Как исправить? Модератор: не используй тег CODE для цитирования сообщений об ошибках - портится форматирование форума Это сообщение отредактировал(а) bsa - 28.8.2014, 17:08 |
||||
|
|||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
В твоём классе не описан оператор <<, который бы получал на вход функцию. Д.б. как-то так
И ещё. Вызов должен быть таким:
Вот - http://ideone.com/aYThBO - подправленный вариант -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
borisbn, спасибо за ответ.
Меня вот что смущает: когда я использую std::stringstream ss; ss << "Hello, World!" << std::endl; то для std::endl нет никаких добавочных символов, типа ss << "Hello, World!" << & std::endl; Как реализовать манипулятор на подобии стандартной библиотеки? |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Для статичных функций преобразование типов к указателю происходит автоматически.
http://ideone.com/phSsHX
Это сообщение отредактировал(а) neosapient - 28.8.2014, 23:57 |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
функторы?
|
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
||||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: -1 Всего: 16 |
Ну, как в C++ сделать так, чтобы это было Вам ужэ сказали -- так что просто совет.
Возьмите для таких вещей Haskell. У него есть два большых плюса: первый -- что по факту там такого гораздо большэ, и подобные интеллектуальные упражнения на нём можно проводить очень долго. Вот, например, функцыя на 9 строк: http://www.haskell.org/ghc/docs/6.12.2/htm...ml#permutations, из стандартной библиотеки -- дажэ после того, как чётко сгруппируешь все вызовы и все параметры -- на понимание работы можэт уйти довольно много времени, и лучшэ почитать литературу, чтобы понять, что это они сделали и зачем. Второй плюс хаскелля -- что вся эта хрень никогда не попадёт в production, и ты сам через пол-года и твои коллеги не будут материться и спотыкаться выясняя, что ещё ты там наизвращал и как надо нестандартно понимать стандартные операторы в конкретно этот файле. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Тогда тебе нужно сделать ф-цию calc свободной (как и ф-ция endl). Как-то так
http://ideone.com/aYThBO Это сообщение отредактировал(а) borisbn - 26.9.2014, 08:51 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
neosapient,
http://ideone.com/fork/9dK9vw или
http://ideone.com/YnvBqL Это сообщение отредактировал(а) baldina - 26.9.2014, 14:54 |
||||
|
|||||
| NoviceF |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
Ну может в данном случае это и не очевидно, но сама по себе подобная техника интересна, например, для логгера. Я вот раньше подобное не встречал, хотя в своё время пытался найти инфу на тему. Так что всем спасибо за инфу и примеры |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |