Как стать автором
Обновить
13
0
Дмитрий @VCoder

Пользователь

Отправить сообщение
PS: Вроде говорили, что на Хабре новичков ногами не бьют (;
В данном примере особых отличий нет. Собственно изначально вывод в лог и был так реализован…
Потом начались проблемы.

В реальном коде (см. ссылки в конце поста) ToString помещен в namespace. Это было сделано для избавления основного пространства имен от «мусора».

operator<<() придется перегружать в основном (глобальном) пространстве имен. Можно перегрузить и в отдельном namespace, но тогда получим кучу проблем потеряем удобство, например с STL, т.к. перегружать в namespace std нельзя (точнее это можно сделать, но, как правило, за это бьют ногами это чреревато проблемами в дальнейшем), а перегрузка в своем namespace не даст преимуществ — мы будем вынуждены явно указывать namespace (что выглядит страшновато — типа MyNamespace::operator<<(s, p) ) или использовать директиву using (засоряя глобальный namespace).

Если есть желание (и время), то попробуйте переписать мой код с перегрузкой операторов вывода и протестируйте на примерах. Если честно, то у меня не хватило терпения (или знаний/опыта) бороться с кучей ошибок, которые при этом вылезают (уж больно много перегрузок operator<<).

Опять-же, это лишь мой собственный опыт. Мне показалось, что это решение кому-то может пригодиться.
В принципе действительно лишний.
Но это соответствует прототипу:
ToStream(std::wostream& strm, const T& val)

Информация

В рейтинге
Не участвует
Откуда
Brisbane, Queensland, Австралия
Зарегистрирован
Активность