Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Класс для строк

45K
16 августа 2009 года
Яски
15 / / 17.07.2009
Всем привет. У меня приложение должно работать со строками в разных кодировках. Думаю сделать юникод основной кодировкой, также из приложения будут вызываться стороние функции, которые требуют строки в мультибайтовой кодировке. Т.е. нужен удобный класс строк, который хранит их в юникоде и имеет методы, которые конвертируют и возвращают результат в мультибайтовой кодировке.

Сначала подумалось мне взять std::wstring и добавить ему методы для конвертации в другую кодировку, но в одной книге прочел, что классы STL, с std::wstring в том числе, не имеют виртуального деструктора и наследовать от них не рекомендуется.

Так вот y меня вопросы:
1) Какой класс лучше использовать для строк, я интенсивно использую STL, поэтому лучше STL-совместимый.
2) std::wstring в MS Visual Studio 2008 использует подсчет ссылок или нет?
3) Что за кодировка такая MultiByte? Как я понял она состоит из двух частей — первый байт сохраняется в текущей региональной кодировке(которая задается непонятно где), второй байт используется в ином случае. Я прав?
11
16 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
для перекодирования строк есть макросы W2A, A2W
применять вместе с макросом USES_CONVERSION
45K
16 августа 2009 года
Яски
15 / / 17.07.2009
C конверсией я думаю разберусь (тем более, что не использую MFC), проблема в другом — как расширить класс std::wsting? Мне нужно добавить метод str.m_str(). Использовать макросы неудобно и ведет к появлению ошибок.
11
16 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
std::wstring == std::basic_string<wchar_t>
и
std::string == std::basic_string<char>
const value_type * = std::basic_string::c_str()
45K
16 августа 2009 года
Яски
15 / / 17.07.2009
Понял, что в моем случае не страшно, что std::wstring не имеет виртуального деструктора. Начал расширять класс, написал следующее:

 
Код:
#include <string>

class astring:
  public: std::wstring
{
};

В итоге большая часть методов из wstring не наследуется в мой класс astring, например, operator=(). Целый день пытаюсь разобраться в кодировках, не понимаю уже ничего.
2.1K
17 августа 2009 года
Norgat
452 / / 12.08.2009
2Яски, сделай так:

 
Код:
class astring:public wstring
{
public:
   astring():wstring(){}
}


т.е. для любого конструктора, который будешь использовать, добавляй :wstring()
240
28 августа 2009 года
aks
2.5K / / 14.07.2006
Цитата: Яски

3) Что за кодировка такая MultiByte?


Это вобще не кодировка. Это просто по сути признак какой то кодировки, которая может быть в том числе и с переменным количеством байт на символ, и для хранения которой обычно используется тип на основе char *.
Тоесть это может быть что угодно начиная с ASCII до UTF-8

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог