C++. Сборник рецептов - [184]
Пример 14.4. Заголовочный файл xerces_strings.hpp, используемый для выполнения преобразований между строками Xerces и строками со стандартными символами
>#ifndef XERCES_STRINGS_HPP_INCLUDED
>#define XERCES_STRINGS_HPP_INCLUDED
>#include
>#include
>#include
>typedef std::basic_string
>// Преобразует строку со стандартными символами
>// в строку с расширенным набором символов
>inline XercesString fromNative(const char* str) {
>boost::scoped_array
> return XercesString(ptr.get());
>}
>// Преобразует строку со стандартными символами
>// в строку с расширенным набором символов.
>inline XercesString fromNative(const std::string& str) {
> return fromNative(str.c_str());
>}
>// Преобразует строку с расширенным набором символов
>// в строку со стандартными символами.
>inline std::string toNative(const XMLCh* str) {
>boost::scoped_array
> return std::string(ptr.get());
>}
>// Преобразует строку с расширенным набором символов в строку со стандартными символами.
>inline std::string toNative(const XercesString& str) {
> return toNative(str.c_str());
>}
>#endif // #ifndef XERCES_STRINGS_HPP_INCLUDED
Для выполнения преобразований между строками Xerces и >std::wstring
просто используйте конструктор >std::basic_string
, передавая ему два итератора. Например, можно определить следующие две функции.
>// Преобразует строку Xerces в строку std::wstring
>std::wstring xercesToWstring(const XercesString& str) {
> return std::wstring(str.begin(), str.end());
>}
>// Преобразует строку std::wstring в строку XercesString
>XercesString wstringToXerces(const std::wstring& str) {
> return XercesString(str.begin(), str.end());
>}
В этих функциях используется тот факт, что >wchar_t
и >XMLCh
являются интегральными типами, каждый из которых может неявно преобразовываться в другой; это должно работать независимо от размера >wchar_t
, пока не используются значения, выходящие за диапазон >XMLCh
. Вы можете определить подобные функции, принимающие в качестве аргументов строки в C-стиле, используя конструктор >std::basic::string
, которому передаются в качестве аргументов массив символов и длина.
Для представления строк в коде Unicode библиотека Xerces использует последовательности символов >XMLCh
, завершаемые нулем. Тип >XMLCh
вводится с помощью >typedef
как интегральный тип, зависящий от реализации и содержащий не менее 16 бит, которых достаточно для представления символов почти любого языка. Xerces применяет символьную кодировку UTF-16, что подразумевает теоретическую возможность представления некоторых символов в коде Unicode в виде последовательности из нескольких символов >XMLCh
; однако практически можно считать, что каждый символ >XMLCh
непосредственно представляет один символ в коде Unicode, т.е. имеет числовое значение символа Unicode.
Одно время тип >XMLCh
определялся с помощью >typedef
как >wchar_t
, что позволяло легко сохранять копию строки Xerces как >std::wstring
. Однако в настоящее время Xerces определяет >XMLCh
на всех платформах с помощью >typedef
как >unsigned short
. Кроме всего прочего это означает, что на некоторых платформах типы >XMLCh
и >wchar_t
имеют разный размер. Поскольку Xerces может изменить в будущем определение >XMLCh
, нельзя рассчитывать на то, что >XMLCh
будет идентичен какому-то конкретному типу. Поэтому, если требуется сохранить копию строки Xerces, следует использовать тип >std::basic_string
.
При использовании Xerces вам придется часто выполнять преобразования между строками со стандартными символами и строками Xerces; для этой цели в Xerces предусмотрена перегруженная функция >transcode()
. >transcode()
может преобразовать строку Unicode в строку со стандартными символами, использующую «родную» кодировку символов, или строку с «родной» кодировкой со стандартными символами в строку Unicode. Однако смысл родной кодировки точно не определен, поэтому если вы программируете в среде, в которой часто используется несколько кодировок символов, то вам придется все взять в свои руки и выполнять преобразования особым образом, используя либо фасет >std::codecvt
, либо подключаемые службы перекодировки (pluggable transcoding services) библиотеки Xerces, описанные в документации Xerces. Однако во многих случаях вполне достаточно использовать >transcode()
.
Память под возвращаемые функцией >transcode()
строки, завершающиеся нулем, динамически выделяется при помощи оператора >new
в форме массива; вам придется строку удалять самому, используя оператор >delete[]
. Это создает небольшую проблему управления памяти, поскольку обычно требуется копировать строку или записывать ее в поток до ее удаления, а эти операции могут выбросить исключение. Я решаю эту проблему в примере 14.4 с помощью шаблона >boost::scoped_array
, который динамически выделяет память под массив и автоматически удаляет его при выходе из области видимости, даже если выбрасывается исключение. Например, рассмотрим реализацию функции >fromNative
.
>inline XercesString fromNative(const char* str) {
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.
«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.