Я модернизирую большую устаревшую кодовую базу MFC, которая содержит настоящую смесь строковых типов:
- CString
- std :: string
- std :: wstring
- символ *
- wchar_t *
- _bstr_t
Я хотел бы стандартизировать один строковый тип внутри и преобразовывать в другие типы только тогда, когда это абсолютно необходимо сторонним API (то есть функциями COM или MFC). Вопрос, который обсуждаем я и мои коллеги; какой тип строки мы должны стандартизировать?
Я бы предпочел одну из стандартных строк C ++: std :: string или std :: wstring. Я лично склоняюсь к std :: string, потому что нам не нужны широкие символы - это внутренняя кодовая база без пользовательского пользовательского интерфейса (т.е. нет необходимости в поддержке нескольких языков). «Простые» строки позволяют нам использовать простые строковые литералы без украшений («Привет, мир» против L «Привет, мир» или _T («Привет, мир»)).
Есть ли официальная позиция сообщества программистов? Когда вы сталкиваетесь с несколькими типами строк, что обычно используется в качестве стандартного «внутреннего» формата хранения?
std::wstring
хорошо подходит для этой платформы; такstd::vector<wchar_t>
. - person Richard Critten   schedule 31.08.2017std::wstring
. С узкими строками вам понадобятся преобразования повсюду. Примечание: поскольку вы этого еще не знаете, вы не лучший выбор для человека, который будет выполнять эту работу, это основы. В этом выборе виноват ваш менеджер. - person Cheers and hth. - Alf   schedule 31.08.2017_T("Hello world")
,T
макросы устарели в 2000 году с появлением Layer for Unicode, и сегодня наши инструменты не могут создавать исполняемые файлы для версий Windows (9x), на которые нацелены эти макросы. Я так понимаю, это устаревшая кодовая база. Но когда ваша задача - очистить его, упоминаниеT
макросов как удобных абсурдно и очень контрпродуктивно. - person Cheers and hth. - Alf   schedule 31.08.2017