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

Boost.Hana: boost::hana::range< T, from, to > Struct Template Reference

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Полуоткрытый интервал времени компиляции<hana::integral_constant>с.

А.<range>представляет собой полуоткрытый интервал формы<[from, to)>, содержащей<hana::integral_constant>с данного типа.<[from, to)>обозначение представляет значения, начинающиеся с<from>(включительно) до, но исключая<from>. Это немного похоже на список<from, from+1, ..., to-1>.

В частности, обратите внимание, что границы диапазона могут быть любыми<hana::integral_constant>с (допускаются отрицательные числа) и диапазон не должен начинаться с нуля. Единственное условие – это<from <= to>.

Note
The representation of hana::range is implementation defined. In particular, one should not take for granted the number and types of template parameters. The proper way to create a hana::range is to use hana::range_c or hana::make_range.

Modeled concepts

  1. Comparable
    Два диапазона равны, если и только если они оба пустые или они оба охватывают один и тот же интервал.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется под лицензией Boost Software License, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копию на http://boost.org/LICENSE_1_0.txt)
    пространство именhana =boost::hana;
    // пустые диапазоны равны
    Boost_HANA_CONSTANT_CHECK(hana::make_range(hana::int_c<6>, hana::int_c<6>) == hana::make_range(hana::int_c<0>, hana::int_c<0>));
    // иначе диапазоны равны тогда и только тогда, когда они охватывают один и тот же интервал
    Boost_HANA_CONSTANT_CHECK(hana::make_range(hana::int_c<2>, hana::int_c<5>) == hana::make_range(hana::int_c<2>, hana::int_c<5>));
    BOOST_HANA_CONSTANT_CHECK(hana::make_range (hana::int_c<0>, hana::int_c<3>)!= hana::make_range (hana::int_c<-1>, hana::int_c<3>));
    intmain()
    [ORIG_END] -->
  2. Foldable
    Складкаrangeэквивалентна складыванию спискаintegral_constantс интервалом, который он охватывает.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, версия 1.0.
    // [См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt]
    [ Хана::int_c&[ORIG_END] -->
  3. Iterable
    Итерация надrangeэквивалентна итерации над списком значений, которые она охватывает. Иными словами, повторение по диапазону[from, to)эквивалентно повторению по списку, содержащемуfrom, from+1, from+2, ..., to-1. Также обратите внимание, чтоoperator[]может использоваться вместоatфункции.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, версия 1.0.
    // [См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt]
    [ускорение/хана/back.hpp[ускорение/hana/drop_front.hpp[ускорение/hana/equal.hpp][ускорение/hana/integral_constant.hpp][ускорение/hana/is_empty.hpp][ускорение/hana/not.hpp[2BOOST_HANA_CONSTANT_CHECK(hana:back(r) == hana::int_c<999>);
    int
    ]
    [] [
    [] [] [
    ] [
    ] [
    ] [
    ] [
    ] [
    ] [
    ] [
    ] [[ORIG_END] -->
  4. Searchable
    Поискrangeэквивалентен поиску списка значений в диапазоне[from, to), но он гораздо более эффективен для компиляции.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется по лицензии Boost Software License, Version 1.0.
    // (См. сопроводительный файл LICENSE.md или копию по адресу http://boost.org/LICENSE_1_0.txt)
    [хана::int_c<25>], [хана::int_c<10> [ORIG_END] -->

Synopsis of associated functions

template<>
constexpr auto make< range_tag >
 Create a hana::range representing a half-open interval of integral_constants. More...
 
constexpr auto make_range = make<range_tag>
 Alias to make<range_tag>; provided for convenience. More...
 
template<typename T , T from, T to>
constexpr auto range_c = make_range(integral_c<T, from>, integral_c<T, to>)
 Shorthand to create a hana::range with the given bounds. 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
 

Public Member Functions

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

Associated functions

template<typename T , T from, T to>
template<>
constexpr auto make< range_tag >
related
Initial value:
= [](auto const& from, auto const& to) {
return range<implementation_defined>{implementation_defined};
}

Создайте<hana::range>, представляющий полуоткрытый интервал<integral_constant>с.

При наличии двух<IntegralConstant>с<from>и<to>,<make<range_tag>>возвращает<hana::range>, представляющий полуоткрытый интервал<integral_constant>с<[from, to)>.<from>и<to>должны образовывать действительный интервал, что означает, что<from <= to>должен быть истинным. В противном случае возникает ошибка компиляции. Также обратите внимание, что если<from>и<to>являются<IntegralConstant>s с различными базовыми интегральными типами, то созданный диапазон содержит<integral_constant>s, основной тип которых является их общим типом.

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 irange = hana::make<hana::range_tag>(hana::int_c<0>, hana::int_c<10>); // [0, 10) int
BOOST_HANA_CONSTANT_CHECK(irange == hana::make<hana::range_tag>(hana::int_c<0>, hana::int_c<10>));
constexpr auto lrange = hana::make<hana::range_tag>(hana::int_c<0>, hana::long_c<10>); // [0, 10) long
BOOST_HANA_CONSTANT_CHECK(lrange == hana::make<hana::range_tag>(hana::long_c<0>, hana::long_c<10>));
int main() { }
template<typename T , T from, T to>
constexpr auto make_range = make<range_tag>
related

<make<range_tag>>Для удобства.

template<typename T , T from, T to>
template<typename T , T from, T to>
constexpr auto range_c = make_range(integral_c<T, from>, integral_c<T, to>)
related

<hana::range>Для того, чтобы создать<hana::range>.

Это слово употребляется только в значении<make_range>. В частности,<range_c<T, from, to>>является

range_c<T, from, to> == make_range(integral_c<T, from>, integral_c<T, to>)
Template Parameters
TВ основе лежит интегральный тип<integral_constant>s в создаваемом диапазоне.
fromНижняя граница создаваемого диапазона.
toИсключительная верхняя граница создаваемого диапазона.

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;
BOOST_HANA_CONSTANT_CHECK(hana::front(hana::range_c<int, 0, 5>) == hana::int_c<0>);
BOOST_HANA_CONSTANT_CHECK(hana::back(hana::range_c<unsigned long, 0, 5>) == hana::ulong_c<4>);
BOOST_HANA_CONSTANT_CHECK(hana::drop_front(hana::range_c<int, 0, 5>) == hana::make_range(hana::int_c<1>, hana::int_c<5>));
int main() { }

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




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



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


реклама


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

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