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)