boost::proto::call::impl
// In header: <boost/proto/transform/call.hpp>
template<typename Expr, typename State, typename Data>
struct impl : proto::transform_impl<Expr, State, Data> {
// types
typedef see-below
result_type;
// public member functions
result_type operator()(typename impl::expr_param,
typename impl::state_param,
typename impl::data_param) const;
};
impl
公共类型
typedef see-below
result_type;
在接下来的描述中,如果类型 T
满足 PrimitiveTransform 概念(即 proto::is_transform<T>::value
为 true
),则称 T 建模了 PrimitiveTransform 概念。
proto::call<T>::impl<Expr,State,Data>::result_type
的计算如下:
如果 T
的形式是 PrimitiveTransform
或 PrimitiveTransform()
,则 result_type
为:
typename boost::result_of<PrimitiveTransform(Expr, State, Data)>::type
如果 T
的形式是 PrimitiveTransform(A0)
,则 result_type
为:
typename boost::result_of<PrimitiveTransform( typename boost::result_of<when<_,A0>(Expr, State, Data)>::type, State, Data )>::type
如果 T
的形式是 PrimitiveTransform(A0, A1)
,则 result_type
为:
typename boost::result_of<PrimitiveTransform( typename boost::result_of<when<_,A0>(Expr, State, Data)>::type, typename boost::result_of<when<_,A1>(Expr, State, Data)>::type, Data )>::type
如果 T
的形式是 PrimitiveTransform(A0, A1, A2)
,则 result_type
为:
typename boost::result_of<PrimitiveTransform( typename boost::result_of<when<_,A0>(Expr, State, Data)>::type, typename boost::result_of<when<_,A1>(Expr, State, Data)>::type, typename boost::result_of<when<_,A2>(Expr, State, Data)>::type )>::type
如果 T
的形式是 PolymorphicFunctionObject(A0,…An)
,则 result_type
为:
typename boost::result_of<PolymorphicFunctionObject( typename boost::result_of<when<_,A0>(Expr, State, Data)>::type, … typename boost::result_of<when<_,An>(Expr, State, Data)>::type >::type
如果 T
的形式是 PolymorphicFunctionObject(A0,…An ...)
,则令 T'
为 PolymorphicFunctionObject(A0,…An-1,
,其中 S
)S
是根据 An
的解包表达式计算出的类型序列,具体描述参见 proto::pack
的参考。然后,result_type
为:
typename proto::call<T'>::impl<Expr,State,Data>::result_type
impl
公共成员函数result_type operator()(typename impl::expr_param expr, typename impl::state_param state, typename impl::data_param data) const;
在接下来的描述中,如果类型 T
满足 PrimitiveTransform 概念(即
为 proto::is_transform
<T>::valuetrue
),则称 T 建模了 PrimitiveTransform 概念。
的行为如下:proto::call
<T>::impl<Expr,State,Data>::operator()
如果 T
的形式是 PrimitiveTransform
或 PrimitiveTransform()
,则返回:
PrimitiveTransform()(expr, state, data)
如果 T
的形式是 PrimitiveTransform(A0)
,则返回:
PrimitiveTransform()(when
<_
,A0>()(expr, state, data), state, sata )
如果 T
的形式是 PrimitiveTransform(A0, A1)
,则返回:
PrimitiveTransform()(when
<_
,A0>()(expr, state, data),when
<_
,A1>()(expr, state, data), Data )
如果 T
的形式是 PrimitiveTransform(A0, A1, A2)
,则返回:
PrimitiveTransform()(when
<_
,A0>()(expr, state, data),when
<_
,A1>()(expr, state, data),when
<_
,A2>()(expr, state, data) )
如果 T
的形式是 PolymorphicFunctionObject(A0,…An)
,则返回:
PolymorphicFunctionObject()(when
<_
,A0>()(expr, state, data), ...when
<_
,An>()(expr, state, data) )
如果 T
的形式是 PolymorphicFunctionObject(A0,…An ...)
,则令 T'
为 PolymorphicFunctionObject(A0,…An-1,
,其中 S
)S
是根据 An
的解包表达式计算出的类型序列,具体描述参见
的参考。然后,返回:proto::pack
proto::call
<T'>()(expr, state, data)