Здравствуйте 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;
}
};