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

Boost.Hana: Product

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Представляет собой типы, которые являются общими контейнерами из двух элементов.

Эта концепция в основном представляет типы, которые похожи на<std::pair>. Мотивация создания такой точной концепции схожа с мотивацией, стоящей за концепцией<Sequence>; в разных библиотеках существует множество различных реализаций<std::pair>, и мы хотели бы манипулировать любой из них в целом.

Поскольку<Product>— это в основном пара, неудивительно, что операции, предусмотренные этой концепцией, получают первый и второй элемент пары, создавая пару из двух элементов и других аналогичных операций.

Note
Mathematically, this concept represents types that are category theoretical products. This is also where the name comes from.

Minimal complete definition

<first>,<second>и<make>

<first>и<second>должны, очевидно, возвращать первый и второй элементы пары соответственно.<make>должен принять два аргумента<x>и<y>, представляющие первый и второй элементы пары, и вернуть пару<p>так, что<first(p) == x>и<second(p) == y>.

// 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;
static_assert(hana::first(hana::make<hana::pair_tag>(1, 'x')) == 1, "");
static_assert(hana::second(hana::make<hana::pair_tag>(1, 'x')) == 'x', "");
int main() { }

Laws

Для модели<P>из<Product>должны быть соблюдены следующие законы. Для каждого типа данных<X>и<Y>должна быть уникальная функция \(\mathtt{make} : X \times Y \to P \), так что для каждого<x>,<y>,

x == first(make<P>(x, y))
y == second(make<P>(x, y))
Note
This law is less general than the universal property typically used to define category theoretical products, but it is vastly enough for what we need.

Это означает, что<Product>должен быть наиболее общим объектом, способным содержать пару объектов<(P1, P2)>, но не более того. Поскольку категориальный продукт определяется универсальным свойством, все модели этого понятия изоморфны, а изоморфизм уникален. Иными словами, есть один и только один способ превратить один<Product>в другой.

Другим свойством, которое должно быть удовлетворено<first>и<second>, является свойствонезависимости перемещения, которое гарантирует, что мы можем оптимально разложить<Product>на два его члена, не делая избыточных копий.

Refined concepts

  1. Comparable(бесплатная модель)
    Два продуктаxиyравны друг другу, если сравнивать первый элемент перед вторым элементом.
    // Авторское право Louis Dionne 2013-2016
    // Распространяется под лицензией Boost Software License, версия 1.0.
    // (См. сопроводительный файл LICENSE.md или копию на http://boost.org/LICENSE_1_0.txt)
    #include
    пространство именhana =boost::hana;
    с использованием пространства именstd::буквы;
    intmain() {
    Boost_HANA_RUNTIME_CHECK(hana::make_pair(1,"234");s) == hana::make_pair(1ll,"234";s));
    static_assert (hana::make_pair& #39;x', 2)! hana::make_pair('y', 2),"";
    }
    [ORIG_END] -->
  2. Orderable(бесплатная модель)
    Продукты заказываются с использованием лексикографического заказа, если они были 2-элементными кортежами.
  3. Foldable(бесплатная модель)
    СкладкаProductpэквивалентна складыванию списка, содержащегоfirst(p)иsecond(p), в таком порядке.

Concrete models

<hana::pair>

Variables

constexpr auto boost::hana::first
 Returns the first element of a pair.Note that if the Product actually stores the elements it contains, hana::first is required to return a lvalue reference, a lvalue reference to const or a rvalue reference to the first element, where the type of reference must match that of the pair passed to first. If the Product does not store the elements it contains (i.e. it generates them on demand), this requirement is dropped. More...
 
constexpr auto boost::hana::second
 Returns the second element of a pair.Note that if the Product actually stores the elements it contains, hana::second is required to return a lvalue reference, a lvalue reference to const or a rvalue reference to the second element, where the type of reference must match that of the pair passed to second. If the Product does not store the elements it contains (i.e. it generates them on demand), this requirement is dropped. More...
 

Variable Documentation

constexpr auto boost::hana::first

<#include <boost/hana/fwd/first.hpp>>

Initial value:
= [](auto&& product) -> decltype(auto) {
return tag-dispatched;
}
constexpr auto product
Compute the product of the numbers of a structure.More generally, product will take any foldable stru...
Definition: product.hpp:57

Возвращает первый элемент пары. Обратите внимание, что если<Product>действительно хранит элементы, которые он содержит,<hana::first>требуется вернуть ссылку на lvalue, ссылку на lvalue на const или ссылку на rvalue на первый элемент, где тип ссылки должен соответствовать типу ссылки, переданной паре<first>. Если<Product>не хранит элементы, которые он содержит (т.е. генерирует их по требованию), это требование отпадает.

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;
static_assert(hana::first(hana::make_pair(1, 'x')) == 1, "");
int main() { }
constexpr auto boost::hana::second

<#include <boost/hana/fwd/second.hpp>>

Initial value:
= [](auto&& product) -> decltype(auto) {
return tag-dispatched;
}
constexpr auto product
Compute the product of the numbers of a structure.More generally, product will take any foldable stru...
Definition: product.hpp:57

Возвращает второй элемент пары. Обратите внимание, что если<Product>действительно хранит элементы, которые он содержит,<hana::second>требуется вернуть ссылку на lvalue, ссылку на lvalue на const или ссылку на rvalue на второй элемент, где тип ссылки должен соответствовать типу ссылки, переданной паре<second>. Если<Product>не хранит элементы, которые он содержит (т.е. генерирует их по требованию), это требование отпадает.

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;
static_assert(hana::second(hana::make_pair(1, 'x')) == 'x', "");
int main() { }

Статья Boost.Hana: Product раздела может быть полезна для разработчиков на c++ и boost.




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:24:14/0.0062129497528076/1