proto::make<T>::impl<Expr, State, Data>::result_typeвычисляется следующим образом:
ЕслиTявляетсяОбъектным преобразованиемформыObject(A0,…An)илиObject(A0,…An...), то пустьOбудет типом возврата.Object. В противном случаеOбудетT. Затемresult_typeтипдеф вычисляется следующим образом:
Еслиproto::is_transform<O>::valuetrue, то пусть результат будет
boost::result_of<proto::when<_, O>(Expr, State, Data)>::type
. Отметим, что произошла замена.
Если<O>является шаблоном, подобным<proto::noinvoke<S<X0,…Xn> >>, то тип результата рассчитывается следующим образом:
Для каждого<i>в<[0,n]>пусть<
Xi'
>будет<
boost::result_of<proto::make<Xi>(Expr, State, Data)>::type
>(который оценивает эту процедуру рекурсивно). Отметим, что произошла замена. (В этом случае Прото просто предполагает, что произошла замена ради эффективности компиляции времени. В противном случае не было бы смысла<proto::noinvoke<>>.
Тип результата<
S<X0',…Xn'>
>.
Если<O>является шаблоном<S<X0,…Xn>>, то тип результата рассчитывается следующим образом:
Для каждого<i>в<[0,n]>пусть<
Xi'
>будет<
boost::result_of<proto::make<Xi>(Expr, State, Data)>::type
>(который оценивает эту процедуру рекурсивно). Обратите внимание, были ли какие-либо замены в ходе этой операции.
Если какие-либо замены имели место на вышеуказанной стадии и<
S<X0',…Xn'>
>имеет вложенный<type>типдеф, то тип результата<
S<X0',…Xn'>::type
>.
В противном случае тип результата<
S<X0',…Xn'>
>
.
В противном случае тип результата<O>, и обратите внимание, что замены не произошло.
Если<T>имеет форму<O(A0,…An...)>, то пусть<T'>будет<O(A0,…An-1,S>, где<S>является последовательностью типа, вычисленной из выражения распаковки<An>, как описано в ссылке для<proto::pack>. Возвращение:
<
proto::make<T'>()(expr, state, data)
>
В противном случае, построить и вернуть объект<that>следующим образом:
<
result_type that = result_type();
>
Статья Struct template impl раздела The Boost C++ Libraries BoostBook Documentation Subset Struct template make может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.