Концептуально, hana::string похож на тюльпановый холдинг integral_constant основного типа char. Однако интерфейс hana::string не так богат, как интерфейс tuple, потому что строка может содержать только компиляционные символы в отличие от любого типа объекта.
Строки сравнивания используются для простых целей, таких как наличие ключей в hana::map или тегирование членов Struct. Тем не менее, вы можете обнаружить, что hana::string не предоставляет достаточно функциональности, чтобы использоваться в качестве полномасштабной реализации строки компиляции (например, regexp-сопоставление или поиск подстроек). Действительно, предоставление всеобъемлющего струнного интерфейса - это много работы, и на данный момент это выходит за рамки библиотеки.
Note
The representation of hana::string is implementation-defined. In particular, one should not take for granted that the template parameters are chars. The proper way to access the contents of a hana::string as character constants is to use hana::unpack or hana::to<char const*>, as documented below.
Modeled concepts
Для большинства целей, hana::string функционально эквивалентна тюльпанному холдингу Constant основного типа char.
Comparable Две строки равны тогда и только тогда, когда у них одинаковое количество символов и символов при соответствующих индексах равны.
// Авторское право Louis Dionne 2013-2016
// Распространяется под лицензией Boost Software License, версия 1.0.
// (См. сопроводительный файл LICENSE.md или копию на http://boost.org/LICENSE_1_0.txt)
Iterable Итерация над строкой эквивалентна итерации над последовательностью ее символов. Также обратите внимание, чтоoperator[]может использоваться вместоatфункции.
// Авторское право Louis Dionne 2013-2016
// Распространяется по лицензии Boost Software, версия 1.0.
// (См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt)
hana::string может быть преобразована в constexpr нуль-ограниченную строку типа char const* с помощью to. Это позволяет легко превратить строку компиляции-времени в строку времени выполнения. Однако обратите внимание, что это преобразование не является вложением, поскольку char const* не моделирует те же понятия, что и hana::string.
// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
Основной тип hana::string может быть либо char const*, либо какой-либо другой конструкционный контейнер. В первом случае hana::string не может быть Constant, потому что модели нескольких понятий не будут соблюдены лежащим в основе типом, в результате чего value не будет структурно-консервировать. Предоставление базового значения конструкционно-подобного типа контейнера типа std::string_view было бы здорово, но на данный момент это немного сложно.
Учитывая ноль или более integral_constants базового типа char, make<string_tag> создает hana::string, содержащий эти символы. Это в основном обеспечивает последовательность с остальной библиотекой, так как hana::string_c в большинстве случаев удобнее использовать.
Example
// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
Создайте строку времени компиляции из строкового буквала.
Этот макрос является более удобной альтернативой string_c для создания строк времени компиляции. Однако, поскольку этот макрос использует ягненка внутри, его нельзя использовать в неоцененном контексте.
Example
// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
Создает строку времени компиляции из строкового литерала.
Строка буквальна в компиляционном времени и результат возвращается как hana::string. Эта функция является расширением, которое отключено по умолчанию; см. ниже для деталей.
Note
Only narrow string literals are supported right now; support for fancier types of string literals like wide or UTF-XX might be added in the future if there is a demand for it. See this issue if you need this.
Warning
This user-defined literal is an extension which requires a special string literal operator that is not part of the standard yet. That operator is supported by both Clang and GCC, and several proposals were made for it to enter C++17. However, since it is not standard, it is disabled by default and defining the BOOST_HANA_CONFIG_ENABLE_STRING_UDL config macro is required to get this operator. Hence, if you want to stay safe, just use the BOOST_HANA_STRING macro instead. If you want to be fast and furious (I do), define BOOST_HANA_CONFIG_ENABLE_STRING_UDL.
Example
// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
Статья Boost.Hana: boost::hana::string< implementation_defined > Struct Template Reference раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.