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

Boost.Hana: boost::hana::common< T, U, enabler > Struct Template Reference

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Метафункция возвращает общий тип данных между двумя типами данных.

common— естественное расширениеstd::common_typeМетафункция для типов данных. Учитывая два типа данныхTиU, мы говорим, что они имеют общий типC, если оба объекта типа данныхTи объекты типа данныхUмогут быть преобразованы (с использованиемв) в объект типа данныхC, и если это преобразование является сохранением равенства. Другими словами, это означает, что для любых объектовt1, t2типа данныхTиu1, u2типа данныхUудовлетворяется следующий закон:

to<C>(t1) == to<C>(t2) if and only if t1 == t2
to<C>(u1) == to<C>(u2) if and only if u1 == u2

,, [], [], [], [], [], []. Другими словами, еслиTиUимеют общий тип данныхC,Common::typeявляется псевдонимомC. В противном случаеcommonне имеет вложенноготипаи может использоваться в зависимых контекстах для использования SFINAE. По умолчанию точные шаги, за которыми следуютобщиедля определения общего типаCTиU.

  1. ЕслиTиUодинаковы, тоCT.
  2. В противном случае, еслиtrue ? std::declval<T>() : std::declval<U>()хорошо сформировано, тоCявляется типом этого выражения после использованияstd::decayна нем. Это именно тот тип, который был бы возвращенstd::common_type, за исключением того, что пользовательские специализацииstd::common_typeне учитываются.
  3. В противном случае не обнаруживается общий тип данных иcommon<T, U>не имеет вложенногоtypeпсевдонима, если только он не является явно специализированным.

Как следует из пункта 3, также возможно (и иногда необходимо) специализироватьсяобщеевувеличение::hanaпространство имен для пар пользовательских типов данных, когда поведение по умолчаниюобщеенедостаточно. Обратите внимание, чтопри-основанной специализации поддерживается при специализацииобщейвбустере::hanaпространство имен.

Rationale for requiring the conversion to be equality-preserving

Это решение согласуется с предложенной концепцией дизайна стандартной библиотекиN3351. Кроме того, если бы мы не требовали этого, то все типы данных тривиально разделяли бы общий тип данныхvoid, поскольку все объекты могут быть преобразованы в него.

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)
#include <type_traits>
namespace hana = boost::hana;
struct Person { };
struct Employee : Person { };
static_assert(std::is_same<hana::common<int, float>::type, float>{}, "");
static_assert(std::is_same<hana::common<Person, Employee>::type, Person>{}, "");
int main() { }

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:21:19/0.005295991897583/1