Прежде всего, вы не можете использовать имя класса в качестве значения - оно просто не одно. Поэтому вам нужно ввести другое имя для использования с <<
- скажем, global
(с строчной буквой "g").
В общем случае, если вы хотите ввести «потоковое» имя без определения объекта, вы должны написать потоковый манипулятор:
std::ostream& foo(std::ostream& out)
{
out << "foo";
return out;
}
Хитрость здесь в том, что у потоков есть перегруженный оператор <<
, такой, что если вы передадите ему указатель функции, а эта функция примет и вернет поток, тогда <<
будет эквивалентно применению функции к потоку. , Другими словами, вы можете написать:
std::cout << 123 << foo << 456;
и это будет так же, как:
foo(std::cout << 123) << 456;
Так, например, реализовано std::endl
.
То же самое относится и к >>
, и вы можете предоставить функцию шаблона для basic_istream
и / или basic_ostream
, если хотите, чтобы она была более общей.