Wstring c что это
Перейти к содержимому

Wstring c что это

Обработка строк в C++/WinRT

С помощью C++/WinRT можно вызывать интерфейсы API среды выполнения Windows, используя типы широких строк стандартной библиотеки C++, такие как std::wstring (но не типы узких строк, такие как std::string). В C++/WinRT имеется настраиваемый строковый тип winrt::hstring (определенный в базовой библиотеке C++/WinRT — ). Этот строковый тип фактически принимают и возвращают конструкторы, функции и свойства среды выполнения Windows. Но, во многих случаях благодаря конструкторам преобразования hstring и операторам преобразования можно выбирать, следует ли учитывать hstring в коде клиента. Если вы разрабатываете интерфейсы API, вероятность того, что вам нужно знать о hstring, возрастает.

В C++ существует множество строковых типов. Различные варианты существуют во множестве библиотек в дополнение к std::basic_string из стандартной библиотеки C++. В С++17 имеются служебные программы для преобразования строк и std::basic_string_view, чтобы заполнить пробелы между всеми строковыми типами. Тип winrt::hstring дает возможность преобразования с помощью std::wstring_view для обеспечения взаимодействия, для которого был создан std::basic_string_view.

Использование std::wstring (и, при необходимости, winrt::hstring) с Uri

Но hstring имеет конструкторы преобразования, позволяющие работать с ним, не учитывая этот факт. Ниже приведен пример кода, показывающий, как создать Uri из литерала широкой строки, представления широкой строки и std::wstring.

Метод доступа к свойству Uri::Domain имеет тип hstring.

Uri реализует интерфейс IStringable.

Можно использовать функцию hstring::c_str для получения стандартной широкой строки из hstring (так же, как и из std::wstring).

Если у вас есть hstring, значит, вы можете получить Uri.

Рассмотрим метод, который принимает hstring.

Все параметры, которые мы рассмотрели, также применяются в таких случаях.

Для hstring имеется член-оператор преобразования std::wstring_view, и преобразование осуществляется без дополнительных затрат.

Функции и операторы winrt::hstring

Для winrt::hstring реализован ряд конструкторов, операторов, функций и итераторов.

Тип hstring является диапазоном, поэтому вы можете использовать его с основанным на диапазоне или с std::for_each . Он также предоставляет операторы сравнения для естественного и эффективного сравнения с его аналогами в стандартной библиотеке C++. Кроме того, он включает в себя все, что необходимо для использования hstring в качестве основы для ассоциативных контейнеров.

Мы понимаем, что многие библиотеки C++ используют std::string и работают только с текстом UTF-8. Для удобства мы предоставляем вспомогательные методы, такие как winrt::to_string и winrt::to_hstring, для двустороннего преобразования.

WINRT_ASSERT — это макроопределение, которое передается в WINRT_ASSERT .

Дополнительные примеры и сведения о функциях и операторах hstring приведены в справочных материалах по API winrt::hstring.

Обоснование для winrt::hstring и winrt::param::hstring

Среда выполнения Windows реализуется в знаках wchar_t, но двоичный интерфейс приложения (ABI) среды выполнения Windows не является подмножеством того, что предоставляют std::wstring или std::wstring_view. Их использование приведет к значительной неэффективности. Вместо этого C++/WinRT предоставляет winrt::hstring, представляющий собой неизменяемую строку, согласованную с базовым HSTRING и реализованную за интерфейсом, аналогичным std::wstring.

Можно заметить, что входные параметры C++/ WinRT, которые логически должны принимать winrt::hstring, фактически ожидают winrt::param::hstring. Пространство имен param содержит набор типов, используемых исключительно для оптимизации входных параметров для естественной привязки к типам стандартной библиотеки C++, а также позволяющих избежать копий и других аспектов, снижающих эффективность. Эти типы не следует использовать напрямую. Если вы хотите использовать оптимизацию для собственных функций, применяйте std::wstring_view. Также см. статью о передаче параметров в интерфейс ABI.

Идея состоит в том, что вы можете по большей части игнорировать особенности управления строками среды выполнения Windows и просто эффективно работать с тем, что вам известно. Это важно, учитывая, насколько активно строки используются в среде выполнения Windows.

Форматирование строк

Одно из средств форматирования строк — std::wstringstream. Вот пример, который форматирует и отображает простое сообщение отладочной трассировки.

Правильный способ задать свойство

Для установки свойств значение передается в функцию задания. Пример приведен ниже.

Ниже приведен неправильный код. Компиляция происходит, но все, что выполняется — это изменение значения winrt::hstring, возвращаемое функцией получения доступаText(), а затем результаты отклоняются.

Классы string и wstring. Часть 5

Класс string стандартной библиотеки C++ хорошо известен и охотно используем. Но не все и не всегда задумываются над тем, что класс string , при некоторых отличиях в деталях — это и есть контейнер вектор: vector < char > . Правда, он дополнен некоторыми особенностями (но такой код и вы сами могли бы написать):

Метод size() задублирован методом length(). Они полностью тождественны, из соображений удобства. Просто для строки естественнее иметь длину, чем размер;

Определены перегруженные операции + , += которые возвращают конкатенацию (объединение) строк;

Определён конструктор, инициализирующий string при создании начальным значением символьной строки в формате ASCIIZ ( char* — указатель на символьный массив в стиле C завершающийся нулём);

Определён метод c_str() , который возвращает указатель на внутреннее содержимое строки в формате ASCIIZ. Поскольку это внутреннее значение, его можно использовать, но не стоит пытаться его изменять. Это хорошо не закончится.

Во всём же остальном строки ведут себя точно как вектор, и к ним применимы все операции над векторами. Понимание того, что представляет собой класс string ( vector<char> ) может позволить создать ряд неожиданных эффектов. Например, поскольку нулевой символ не имеет для vector<char> никакого особого значения (в отличие от строки C), то его тоже вполне можно «заталкивать» в конец string. Тем самым можно поместить в единственную переменную string целый массив C-строк или даже целый текст.

Вот, как подобным образом поместить весь набор переменных окружения ( environment ) операционной системы в одну переменную string :

string и wstring

Все, что говорится о контейнере string, в равной степени относится и к wstring, его аналогу с расширенной кодировкой символов. Соответственно, любые упоминания о связи между string и char или char* относятся и к связи между wstring и wchar_t или wchar_t*. Иначе говоря, отсутствие специальных упоминаний о строках с расширенной кодировкой символов не означает, что в STL они не поддерживаются. Контейнеры string и wstring являются специализациями одного шаблона basic_string.

Читайте также

Объект String

Объект String Объект String предоставляет средства для форматирования и выделения части строк. Для этой цели он содержит обширный перечень методов (табл. 11.14 и 11.15).Таблица 11.14. Свойства объекта String Таблица 11.15. Методы объекта String Рассмотрим использование методов объекта

string-length()

string-length() Как можно предположить, функция string-length возвращает длину (length) переданной ей строки. Функция применяется таким образом:number string-length(string?)В следующем примере я определяю длину названия каждой планеты при помощи string-length:&lt;?xml version="1.0"?&gt;&lt;xsl:stylesheet

Объект String

Объект String Встроенный объект String предназначен для выполнения различных операций над текстовыми строками. Обычно объекты класса String создаются просто с помощью записи в переменную текстового литерала:var s1, s2;s1 = "Это строка";s2 = "Это тоже строка";Также можно создавать такие

77. Вместо массивов используйте vector и string

77. Вместо массивов используйте vector и string РезюмеИзбегайте реализации абстракция массива посредством массивов в стиле С, арифметики указателей и примитивов управления памятью. Использование vector или string не только сделает проще вашу жизнь, но и позволит написать более

78. Используйте vector (и string::c_str ) для обмена данными с API на других языках

78. Используйте vector (и string::c_str) для обмена данными с API на других языках Резюмеvector и string::c_str служат шлюзом для сообщения с API на других языках. Однако не полагайтесь на то, что итераторы являются указателями; для получения адреса элемента, на который ссылается vector&lt;T&gt;::iterator

Тип данных System.String

Тип данных System.String Ключевое слово string в C# является сокращенным обозначением типа System.String, предлагающего ряд членов, вполне ожидаемых от этого класса. В табл. 3.12 предлагаются описания некоторых (но, конечно же, не всех) таких членов.Таблица 3.12. Некоторые члены System.String Член

Контейнеры vector и string

Контейнеры vector и string Все контейнеры STL по-своему полезны, однако большинство программистов С++ работает с vector и string чаще, чем с их собратьями, и это вполне понятно. Ведь контейнеры vector и string разрабатывались как замена массивов, а массивы настолько полезны и удобны, что

Совет 15. Помните о различиях в реализации string

Совет 15. Помните о различиях в реализации string Бьерн Страуструп однажды написал статью с интригующим названием «Sixteen Ways to Stack a Cat» [27], в которой были представлены разные варианты реализации стеков. Оказывается, по количеству возможных реализаций контейнеры string не уступают

Вызов document(string)

Вызов document(string) В случае если функции document передана строка, возвращаемое множество будет состоять из корневого узла внешнего документа. URI этого документа как раз и сообщается строковым аргументом функции document.Интересной особенностью является возможность передать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *