![]() |
|
Модераторы: bsa |
![]()
|
|
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 1 Всего: 3 |
Есть след. класс.
Нужно чтобы cout принимал мои типы, а именно: char_type и string_type. Изначально хотел, сделать у своего класса оператор <<, но как выяснилось позже это будет работать как "myClass << std::cout" что совсем не то что надо. Нужно же вот так: "std::cout << myClass", а для этого нужно сделать std::ostream другом моего класса, вот тут я и застопорился. Использовать "friend std::ostream& operator<< (std::ostream& o, myClass const& my);" не получится т.к. он принимает мой класс, мне же нужно чтобы он принимал только типы(char_type и string_type) моего класса. Если это конечно реально. Это сообщение отредактировал(а) rudvil - 5.11.2010, 16:19 --------------------
xor |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
т.е. ты хочешь переопределить оператор << для совершенно других типов/классов через свой класс ? но зачем ? Как ты представляешь себе использование такого механизма ?
|
|||
|
||||
| rudvil |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 1 Всего: 3 |
т.к. в методах часто используется std::cout с этим самим char_type, пока CharT=char все ок, но если будет другой тип который простой std::cout не поддерживает, то вот тут и начнутся проблемы.
Почти как тут, только для моего типа char_type из шаблонного класса
Вот и хотелось бы узнать как, т.к. сам пока ничего путного не придумал. Это сообщение отредактировал(а) rudvil - 5.11.2010, 17:24 --------------------
xor |
||||||||
|
|||||||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Проблема в том что char_type далеко не твой тип. А тип который скрывается за CharT может быть написан хоть дядей васей из китая. И если этот дядя хороший человек то он должен был "зафрендить" operator<< ну и собсно его реализовать, или оставить сейю возможность на усмотрение тех кто его тип будет юзать. А переопределять оператор << для какогото не твоего типа через твой класс членом которого является этот тип... нуу по моему это както неправильно PS. я кстати по соседству создал тему, главный вопрос которой как вообще правильно определить шаблонный оператор << и зафрендить его в свой шаблонный класс... это оказалось весьма не тривиальная задача. PPS. для меня Это сообщение отредактировал(а) cupper - 5.11.2010, 19:47 |
|||
|
||||
| rudvil |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 1 Всего: 3 |
Что-ж остается надеяться что char'ы будут адаптированы под cout. Спасибо за объяснения, считаю вопрос решенным, если все-же что-то надумаю, то отпишусь. --------------------
xor |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Более того, в рамках класса grammar_parser это (переопределение оператора <<) вообще сделать невозможно, т.к. внутри класса grammar_parser о CharT ничего не известно. Как, по мнению ТС, должна выглядеть реализация operator<<(CharT) ? |
|||
|
||||
| rudvil |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 1 Всего: 3 |
xvr, как-то так
http://liveworkspace.org/code/a1d7e34b8e3f...989c36e536d4629 только почему-то не выводится текст
Это сообщение отредактировал(а) rudvil - 8.11.2010, 14:57 --------------------
xor |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 1 Всего: 3 |
В принципе не важно "как конвертировать", это лишь пример. Не понятно другое - почему не вызывается "мой" оператор <<. Это сообщение отредактировал(а) rudvil - 8.11.2010, 22:13 --------------------
xor |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Это существенно - сам класс grammar_parser не знает как конвертировать, поэтому не может реализовать operator<<. Нужны какие то 'внешние' знания
Попробуйте сделать ваш operator<< не friend'ом, а static inline'ом (за работоспособность не ручаюсь, но вдруг |
|||
|
||||
![]()
|
| Правила форума "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. |