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удовлетворяется следующий закон:
,, [], [], [], [], [], []. Другими словами, еслиTиUимеют общий тип данныхC,Common::typeявляется псевдонимомC. В противном случаеcommonне имеет вложенноготипаи может использоваться в зависимых контекстах для использования SFINAE. По умолчанию точные шаги, за которыми следуютобщиедля определения общего типаCTиU.
ЕслиTиUодинаковы, тоC—T.
В противном случае, еслиtrue ? std::declval<T>() : std::declval<U>()хорошо сформировано, тоCявляется типом этого выражения после использованияstd::decayна нем. Это именно тот тип, который был бы возвращенstd::common_type, за исключением того, что пользовательские специализацииstd::common_typeне учитываются.
В противном случае не обнаруживается общий тип данных и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)
Статья Boost.Hana: boost::hana::common< T, U, enabler > Struct Template Reference раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.