Re[3]: Нужен совет
От: Кодт Россия  
Дата: 19.08.02 10:19
Оценка: 6 (1)
Здравствуйте 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;
  }
};
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.