Можно создать дубликат:
Where should non-member operator overloads be placed?Перегрузка операторов и пространств имен
При просмотре на SO, я часто нахожу вопросы или ответ, который включает в себя перегружать/задающие std::ostream& operator<<(std::ostream& os, const Foo& foo)
или Foo operator+(const Foo& l, const Foo& r)
.
Хотя я знаю, как и когда (а не) писать этих операторов, я смущен насчет вещи namespace
.
Если у меня есть следующий класс:
namespace bar
{
class Foo {};
}
В каком namespace
я должен писать различные определения оператора?
// Should it be this
namespace bar
{
std::ostream& operator<<(std::ostream& os, const Foo& foo);
}
// Or this ?
namespace std
{
ostream& operator<<(ostream& os, const bar::Foo& foo);
}
// Or this ?
std::ostream& operator<<(std::ostream& os, const bar::Foo& foo);
Тот же вопрос относится к operator+
. Итак, что такое хорошая практика здесь и почему?
Дубликат [Где должен размещены не-членные перегрузки оператора?] (http: // stackoverflow.com/questions/3623631/overloading-operator) –
@ Джеймс Макнеллис: Мне действительно не удалось найти аналогичный вопрос. Спасибо;) – ereOn
Имейте в виду, что второе является незаконным, вы можете добавлять специализации в пространство имен 'std'. – GManNickG