| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как создать манипулятор и перегрузить оператор |
| Автор: neosapient 28.8.2014, 10:59 | ||||
| Здравствуйте. Допустим есть класс summator. Он получает параметры через перегруженный оператор <<, а затем суммирует их. Хочу сделать манипулятор calc, который бы производил расчет в момент его вызова. Помогите исправить ошибку. Пример, что хотелось бы получить sum << 1 << 2 << "3" << calc; Пример не рабочего кода
Сообщение об ошибке, которое возникает при обращении к манипулятору sum << summator::calc; в строке 38
Как исправить? Модератор: не используй тег CODE для цитирования сообщений об ошибках - портится форматирование форума |
| Автор: borisbn 28.8.2014, 13:20 | ||||
В твоём классе не описан оператор <<, который бы получал на вход функцию. Д.б. как-то так
И ещё. Вызов должен быть таким:
Вот - http://ideone.com/aYThBO - подправленный вариант |
| Автор: neosapient 28.8.2014, 16:11 |
| borisbn, спасибо за ответ. Меня вот что смущает: когда я использую std::stringstream ss; ss << "Hello, World!" << std::endl; то для std::endl нет никаких добавочных символов, типа ss << "Hello, World!" << & std::endl; Как реализовать манипулятор на подобии стандартной библиотеки? |
| Автор: neosapient 28.8.2014, 23:54 | ||
| Для статичных функций преобразование типов к указателю происходит автоматически. http://ideone.com/phSsHX
|
| Автор: Alca 29.8.2014, 10:04 |
| функторы? |
| Автор: neosapient 25.9.2014, 18:14 |
Приведите пример работы через функторы, чтобы сохранить семантику std::endl |
| Автор: tzirechnoy 26.9.2014, 08:42 |
| Ну, как в C++ сделать так, чтобы это было Вам ужэ сказали -- так что просто совет. Возьмите для таких вещей Haskell. У него есть два большых плюса: первый -- что по факту там такого гораздо большэ, и подобные интеллектуальные упражнения на нём можно проводить очень долго. Вот, например, функцыя на 9 строк: http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/src/Data-List.html#permutations, из стандартной библиотеки -- дажэ после того, как чётко сгруппируешь все вызовы и все параметры -- на понимание работы можэт уйти довольно много времени, и лучшэ почитать литературу, чтобы понять, что это они сделали и зачем. Второй плюс хаскелля -- что вся эта хрень никогда не попадёт в production, и ты сам через пол-года и твои коллеги не будут материться и спотыкаться выясняя, что ещё ты там наизвращал и как надо нестандартно понимать стандартные операторы в конкретно этот файле. |
| Автор: borisbn 26.9.2014, 08:50 | ||
Тогда тебе нужно сделать ф-цию calc свободной (как и ф-ция endl). Как-то так
http://ideone.com/aYThBO |
| Автор: baldina 26.9.2014, 11:49 | ||||
neosapient,
http://ideone.com/fork/9dK9vw или
http://ideone.com/YnvBqL |