Re[10]: [ANN] memcpy() banned
От: Zorgiev  
Дата: 21.08.09 02:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Коваленко Дмитрий, Вы писали:


А>>>а std::copy для char* некошерно.


КД>>Можно сделать специализацию.


А>Нельзя сделать специализацию.


А>

А> 17.3.3.1 Reserved names [lib.reserved.names]

А>1 It is undefined for a C++ program to add declarations or definitions
А> to namespace std or namespaces within namespace std unless otherwise
А> specified. A program may add template specializations for any stan-
А> dard library template to namespace std. Such a specialization (com-
А> plete or partial) of a standard library template results in undefined
А> behaviour unless the declaration depends on a user-defined name of
А> external linkage and unless the specialization meets the standard
А> library requirements for the original template.20)

Положим и так. И что с того? Вряд ли в подавляющем большинстве своём от этого будет
существенный выигрыш.
А>>>вообще CString заместо char*.

КД>>А шо это такое — CString? Ни разу за 10 лет не использовал


А>Ну как Вам объяснить. вот у std::basic_string имеются какие-то size (совпадающий с length) empty (который похож на глагол опустошить), при этом совершенно нет пробразования регистра, регистронезависимого сравнения, возможности _удобно_ получить подстроку с начала/середины/конца, кошерного преобразования "ANSI" <-> Unicode и вообще не понятно, используется ли там подсчёт ссылок, оптимизация малого буфера, или ничего из этого.

А>CString же не обладает вышеозначенными недостатками, и вполне установленный факт, что он использует подсчёт ссылок. Стандарная строка — стандартная, и поэтому велосипеды широко используются.

size/length — ну кто вам виноват что вы не изучали достаточно стандартную библиотеку — вот подучили бы и не путались бы больше. Это же касается и глагола empty. Преобразование регистра — std::use_facet<std::ctype<char> >( yourLocale ).tolower(/*...*/). Что касается преобразований регистра — не забывайте что оно локалезависимое, т.е. в use_facet вы указываете локаль, а CString скорее всего берёт текущую для треда. Вообще не фан CString как и всего MFC в целом. А чем вам кстати не удобен способ с substr методом? Религия не позволяет? С конца надо? rbegin + std algorithms. По поводу кошерного преобразования ANSI -> Unicode, опять же курить фасеты — std::use_facet. А в случае linux приложений или представьте себе что даже QNX бывают — где брать CString? Неужто вешаццо? А представьте себе что существует ещё Borland C++ Builder, Intel C++ compiler и ещё много чего интересного.

С уважением ваш Алекс.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.