Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] ostream 24.11.02 18:01 Число просмотров: 1150
Автор: vim Статус: Незарегистрированный пользователь
|
> Проблема не в том, умею я или нет пользоваться ostream-ом. > Умею. > А в том, что запись получается уж слишком корявая (плюс ко > всему wchar): > > os << L"<tag text=\'" << var << L"\' > id=\'" << id << L"\' attr=\'" << attr > << L"\'/>"; > > А куда как нагляднее было бы: > > owprintf( L"<tag text=\'%S\' id=\'%u\' > attr=\'%i\'/>", var, id, attr); > > P.S. Тока не рекомендуйте XML-парсеры, специфичная задача - > нужно именно так, т.е. самому и в поток.
Несколько предложений:
1) Перегрузи для ostream оператор << (char *)
Внутри этого оператора меняй char на wchar. Тогда тебе не придеться каждый раз ставить L перед строкой типа L"Hello" << L"World"
2) Проверяй содержимое строки. Если видешь в ней символ подстановки значения (%), то не выводи ее в поток, а запоминай. После этого жди пока к тебе придут аргументы, которые должны быть туда подставлены.
Тогда сможешь пользоваться конструкцией типа:
owprintf << "<tag text=\'%S\' id=\'%u\' attr=\'%i\'/>" << var << id << attr;
Только с аргументами тебе придется уж самому разбираться...
В этом варианте должно четко выполняться:
а) аргументы идут именно в той последовательности, в которой они указаны в строке формата
б) следом за строкой с форматом ВСЕГДА идут аргументы (а не какая-нибудь другая строка)
3) Создай некий общий объект, у которого будет два потока:
первый - это строка формат, второй - поток аргументов.
Тогда формат выводишь в один стрим, а аргументы берешь из другого.
smartstream.format << "<tag text=\'%S\' id=\'%u\' attr=\'%i\'/>";
smartstream.values << var << id << attr;
А вобще не знаю насколько это тебе критично, но самому разбираться со строкой формата и аргументами - оно хоть и несложно, но канительно...
|
|
|