Чтобы заставить ваш поток работать с манипуляторами, которые принимают аргументы, не так просто, как когда они не имеют аргументов. Проблема в том, что манипулятор будет иметь вид
ImpDefClass manipulator( argument list );
, где ImpDefClass
- это, как следует из названия, класс, определенный реализацией. Например, в моей системе setprecision
объявлено как
inline _Setprecision setprecision(int __n);
где _Setprecision
- это просто struct
, который определяет моя реализация.
Поэтому проблема в том, что вы не можете просто написать новый оператор потока, такой как
UIStream& operator<<( UIStream&, XXX );
потому что XXX
является классом, определяемым реализацией. Я не уверен, как обойти это, кроме как определить собственные манипуляторы для выполнения тех же задач или привязать ваш код к конкретным реализациям.