Да и нет. Он работает с любым объектом, для которого оператор <<
был определен с ostream. Тот или любой объект, для которого ostringstream
имеет перегруженный метод для обработки.
Либо рассматриваемый объект, который вы передаете в функцию, имеет следующее определение:
ostream& operator <<(ostream &os, MyObj &obj);
или это попадает в одну стандартную перегрузку. Вот список перегруженных функций, найденных в `ostream ', взятых из здесь :
ostream & operator << (bool & val); </p>
ostream & operator << (short & val); </p>
ostream & operator << (unsigned short & val); </p>
ostream & operator << (int & val); </p>
ostream & operator << (unsigned int & val); </p>
ostream & operator << (long & val); </p>
ostream & operator << (unsigned long & val); </p>
ostream & operator << (float & val); </p>
ostream & operator << (double & val); </p>
ostream & operator << (long double & val); </p>
ostream & operator << (const void * val); </p>
ostream & operator << (streambuf * sb); </p>
ostream & operator << (ostream & (* pf) (ostream &)); </p>
ostream & operator << (ios & (* pf) (ios &)); </p>
ostream & operator << (ios_base & (* pf) (ios_base &)); </p>
*** Следующие функции не являются членами, но являются глобальными функциями:
ostream & operator << (ostream & out, char c); </p>
ostream & operator << (ostream & out, подписанный символ c); </p>
ostream & operator << (ostream & out, unsigned char c); </p>
ostream & operator << (ostream & out, const char * s); </p>
ostream & operator << (ostream & out, const подписанные символы * s); </p>
ostream & operator << (ostream & out, const unsigned char * s); </p>