Boost C++ 库

……世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

结构体模板 impl - Boost C++ 函数库
PrevUpHomeNext

结构体模板 impl

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 公共类型

  1. typedef see-below result_type;

    在接下来的描述中,如果类型 T 满足 PrimitiveTransform 概念(即 proto::is_transform<T>::valuetrue),则称 T 建模了 PrimitiveTransform 概念。

    proto::call<T>::impl<Expr,State,Data>::result_type 的计算如下:

    • 如果 T 的形式是 PrimitiveTransformPrimitiveTransform(),则 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 公共成员函数

  1. 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() 的行为如下:


PrevUpHomeNext