Каким образом типы ofstream или ostream приводят все типы к строке?

любой системный тип пользователя, прошедший в объект ostream, преобразуется в строку или символ *?

как cout & lt; & lt; 4 & lt; & lt; & quot; Hello World & quot ;;

прекрасно работает, как это достигается? это & lt; & lt; оператор перегружен для каждого типа? Есть ли способ достичь этого с помощью только одной общей перегруженной функции? я имею в виду, могу ли я иметь только один перегруженный операторный метод с одним параметром (например, void *), а затем решить внутри этого метода, как типизировать целое число для char *

Все сработало частично, если я перегрузил оператор & lt; & lt; используя шаблон т.е.

class UIStream
{
private:
 ofstream stream;
public:
 UIStream();
 ~UIStream();
 template <typename T>
 UIStream& operator << (const T);
};

так что это работает

 UIStream my_stream;
 my_stream<<"bcd"<10;

Однако это дает ошибку компилятора, когда я делаю это

my_stream <<endl;

ошибка C2678: двоичный файл "& lt; & lt;" : не найден оператор, который принимает левый операнд типа «UIStream»; (или нет приемлемого преобразования)

Разве std :: endl тоже не тип объекта?

Ответы на вопрос(4)

Ваш ответ на вопрос