Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Hana: boost::hana::string< implementation_defined > Struct Template Reference

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Строка времени.

Концептуально, 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.

  1. Comparable
    Две строки равны тогда и только тогда, когда у них одинаковое количество символов и символов при соответствующих индексах равны.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется под лицензией Boost Software License, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копию на http://boost.org/LICENSE_1_0.txt)
    пространство именhana =boost::hana;
    [ORIG_END] -->
  2. Orderable
    Общий порядок, реализованный дляOrderable, — обычное лексикографическое сравнение струн.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt)
    #include<#include<
    ] namespace]
    [[ORIG_END] -->
  3. Foldable
    Складка строки эквивалентна складыванию последовательности ее символов.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, Version 1.0.
    // [См. сопроводительный файл LICENSE.md или копия по http://boost.org/LICENSE_130]
    ]]
    ] [
    ] [
    ] [
    ] [
    ] [
    ] [BOOST_HANA_STRING"1234"] == hana::int_c<1 + 2 + 3 + 4>
    ;
    [ORIG_END] -->
  4. Iterable
    Итерация над строкой эквивалентна итерации над последовательностью ее символов. Также обратите внимание, чтоoperator[]может использоваться вместоatфункции.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt)
    BOOST_HANA_STRING"abcd"] [hana::size_c<2>] == hana::char_c<'c'>;
    [ORIG_END] -->
  5. 455
    Поиск по строке эквивалентен поиску по последовательности ее символов.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, Version 1.0.
    // (См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt)
  6. Hashable
    Хэш строки времени компиляции представляет собой тип, однозначно представляющий эту строку.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копия по адресу http://boost.org/LICENSE_1_0.txt)
    #include<boost/hana/not_equal.hpp>
    // 'hana::hash' возвращает тип, однозначно представляющий строку. Хэш
    // совершенен, то есть нет двух разных струн, имеющих одинаковое значение хэша.
    [ORIG_END] -->

Conversion to char const*

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)
namespace hana = boost::hana;
constexpr auto str = hana::string_c<'h', 'i'>;
constexpr char const* s = hana::to<char const*>(str);
static_assert(s[0] == 'h' && s[1] == 'i' && s[2] == '\0', "");
int main() { }

Rationale for hana::string not being a Constant

Основной тип hana::string может быть либо char const*, либо какой-либо другой конструкционный контейнер. В первом случае hana::string не может быть Constant, потому что модели нескольких понятий не будут соблюдены лежащим в основе типом, в результате чего value не будет структурно-консервировать. Предоставление базового значения конструкционно-подобного типа контейнера типа std::string_view было бы здорово, но на данный момент это немного сложно.

Synopsis of associated functions

template<>
constexpr auto make< string_tag >
 Create a compile-time hana::string from a parameter pack of char integral_constants. More...
 
constexpr auto make_string = make<string_tag>
 Alias to make<string_tag>; provided for convenience. More...
 
template<char... s>
constexpr string< implementation_defined > string_c {}
 Create a compile-time string from a parameter pack of characters. More...
 
#define BOOST_HANA_STRING(s)   see documentation
 Create a compile-time string from a string literal. More...
 
template<typename CharT , CharT... s>
constexpr auto operator""_s ()
 Creates a compile-time string from a string literal. More...
 

Friends

template<typename X , typename Y >
constexpr auto operator== (X &&x, Y &&y)
 Equivalent to hana::equal
 
template<typename X , typename Y >
constexpr auto operator!= (X &&x, Y &&y)
 Equivalent to hana::not_equal
 
template<typename X , typename Y >
constexpr auto operator< (X &&x, Y &&y)
 Equivalent to hana::less
 
template<typename X , typename Y >
constexpr auto operator> (X &&x, Y &&y)
 Equivalent to hana::greater
 
template<typename X , typename Y >
constexpr auto operator<= (X &&x, Y &&y)
 Equivalent to hana::less_equal
 
template<typename X , typename Y >
constexpr auto operator>= (X &&x, Y &&y)
 Equivalent to hana::greater_equal
 

Public Member Functions

template<typename N >
decltype(auto) constexpr operator[] (N &&n)
 Equivalent to hana::at
 

Associated functions

template<typename implementation_defined >
template<>
constexpr auto make< string_tag >
related
Initial value:
= [](auto&& ...chars) {
return string<implementation_defined>{};
}

Создайте время компиляции hana::string из пакета параметров char integral_constant.

Учитывая ноль или более 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)
namespace hana = boost::hana;
constexpr auto vowels = hana::tuple_c<char, 'a', 'e', 'i', 'o', 'u', 'y'>;
constexpr auto str = hana::unpack(vowels, hana::make<hana::string_tag>);
int main() { }
template<typename implementation_defined >
constexpr auto make_string = make<string_tag>
related

make<string_tag>; предоставляется для удобства.

template<typename implementation_defined >
template<char... s>
constexpr string<implementation_defined> string_c {}
related

Создайте строку времени компиляции из пакета параметров символов.

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)
namespace hana = boost::hana;
constexpr auto str = hana::string_c<'a', 'b', 'c', 'd', 'e', 'f'>;
BOOST_HANA_CONSTANT_CHECK(hana::is_a<hana::string_tag>(str));
int main() { }
template<typename implementation_defined >
#define BOOST_HANA_STRING (   s)     см. документацию
related

Создайте строку времени компиляции из строкового буквала.

Этот макрос является более удобной альтернативой 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)
namespace hana = boost::hana;
int main() {
BOOST_HANA_CONSTEXPR_LAMBDA auto str = BOOST_HANA_STRING("abcdef");
BOOST_HANA_CONSTANT_CHECK(str == hana::string_c<'a', 'b', 'c', 'd', 'e', 'f'>);
BOOST_HANA_CONSTANT_CHECK(hana::is_a<hana::string_tag>(str));
}
template<typename CharT , CharT... s>
constexpr auto operator""_s ( )
related

Создает строку времени компиляции из строкового литерала.

Строка буквальна в компиляционном времени и результат возвращается как 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)
namespace hana = boost::hana;
using namespace hana::literals;
// By default, this is disabled
#ifdef BOOST_HANA_CONFIG_ENABLE_STRING_UDL
constexpr auto str = "Hello world!"_s;
BOOST_HANA_CONSTANT_CHECK(str == hana::string_c<'H', 'e', 'l', 'l', 'o', ' ',
'w', 'o', 'r', 'l', 'd', '!'>);
BOOST_HANA_CONSTANT_CHECK(hana::is_a<hana::string_tag>(str));
BOOST_HANA_CONSTANT_CHECK(hana::length(str) == hana::size_c<12>);
#endif
int main() { }

Статья Boost.Hana: boost::hana::string< implementation_defined > Struct Template Reference раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:48:52/0.0093669891357422/0