Здравствуйте Кодт, Вы писали:
К>Здравствуйте AlexTAI, Вы писали:
ATAI>>есть 2 основных требования:
ATAI>>1. все работает с юникодом.
ATAI>>2. при перераспределении памяти желательно чтобы перераспределение происходило с "запасом на будующее".
К>Уже есть std::wstring — для юникода
К>К>namespace std {
К>typedef basic_string<wchar_t> wstring;
К>}
К>
К>Если операций склейки много, а результат многокилобайтный, то можно еще использовать список строк
К>К>using namespace std;
К>class wstrlist
К>{
К>protected:
К> typedef list<std::wstring> list_t;
К> list_t m_list;
К>public:
К> void operator +=(const std::wstring& s)
К> {
К> if(s.empty()) return;
К> if(!m_list.empty() && m_list.back().size() + s.size() < 1024)
К> m_list.back() += s; // добавление к имеющейся строке более осмысленно
К> else
К> m_list.push_back(s); // добавим новую строку
К> }
К> void export(owstream& os) const
К> {
К> list_t::const_iterator it = m_list.begin(), itEnd = m_list.end();
К> while(it != itEnd) os << *it;
К> }
К> operator wstring() const
К> {
К> owstrstream os;
К> export(os);
К> return os.str();
К> }
К> friend owstream& operator << (owstream& os, const wstrlist& sl)
К> {
К> sl.export(os);
К> return os;
К> }
К>};
К>
Большое спасибо.
Тогда еще один маленький вопрос — как перекопировать полученный список в wchar_t * Буффер поэффективнее.