В данном примере особых отличий нет. Собственно изначально вывод в лог и был так реализован…
Потом начались проблемы.
В реальном коде (см. ссылки в конце поста) ToString помещен в namespace. Это было сделано для избавления основного пространства имен от «мусора».
operator<<() придется перегружать в основном (глобальном) пространстве имен. Можно перегрузить и в отдельном namespace, но тогда получим кучу проблем потеряем удобство, например с STL, т.к. перегружать в namespace std нельзя (точнее это можно сделать, но, как правило, за это бьют ногами это чреревато проблемами в дальнейшем), а перегрузка в своем namespace не даст преимуществ — мы будем вынуждены явно указывать namespace (что выглядит страшновато — типа MyNamespace::operator<<(s, p) ) или использовать директиву using (засоряя глобальный namespace).
Если есть желание (и время), то попробуйте переписать мой код с перегрузкой операторов вывода и протестируйте на примерах. Если честно, то у меня не хватило терпения (или знаний/опыта) бороться с кучей ошибок, которые при этом вылезают (уж больно много перегрузок operator<<).
Опять-же, это лишь мой собственный опыт. Мне показалось, что это решение кому-то может пригодиться.
Потом начались проблемы.
В реальном коде (см. ссылки в конце поста) ToString помещен в namespace. Это было сделано для избавления основного пространства имен от «мусора».
operator<<() придется перегружать в основном (глобальном) пространстве имен. Можно перегрузить и в отдельном namespace, но тогда
получим кучу проблемпотеряем удобство, например с STL, т.к. перегружать в namespace std нельзя (точнее это можно сделать, но, как правило,за это бьют ногамиэто чреревато проблемами в дальнейшем), а перегрузка в своем namespace не даст преимуществ — мы будем вынуждены явно указывать namespace (что выглядит страшновато — типа MyNamespace::operator<<(s, p) ) или использовать директиву using (засоряя глобальный namespace).Если есть желание (и время), то попробуйте переписать мой код с перегрузкой операторов вывода и протестируйте на примерах. Если честно, то у меня не хватило терпения (или знаний/опыта) бороться с кучей ошибок, которые при этом вылезают (уж больно много перегрузок operator<<).
Опять-же, это лишь мой собственный опыт. Мне показалось, что это решение кому-то может пригодиться.
Но это соответствует прототипу:
ToStream(std::wostream& strm, const T& val)