boost::proto::basic_expr — 表达式树中节点的简化表示。
// In header: <boost/proto/expr.hpp> template<typename Tag, typename Args, long Arity = Args::arity> struct basic_expr { // types typedef Tag proto_tag; typedef Args proto_args; typedef mpl::long_< Arity > proto_arity; typedef proto::basic_default_domain proto_domain; typedef basic_expr proto_grammar; typedef basic_expr proto_base_expr; typedef basic_expr proto_derived_expr; typedef typename Args::childN
proto_childN; // For eachN
in[0,max(Arity,1))
. // public static functions template<typename... A> static basic_expr const make(A const &...); // public member functions basic_expr & proto_base(); basic_expr const & proto_base() const; };
proto::basic_expr<>
是表达式模板树中的一个节点。它是其子树的容器。它也作为树的终端节点。
Tag
是表示此表达式编码的操作的类型。它通常是 boost::proto::tag
命名空间中的结构体之一,但并非必须如此。如果 Arity
为 0,则此 expr<>
类型表示表达式树中的叶节点。
Args
是表示此表达式子节点的类型列表。它是 proto::list1<>
、proto::list2<>
等之一的实例化。子类型必须全部是 proto::expr<>
或 proto::basic_expr<>&
(或通过 proto::extends<>
或 BOOST_PROTO_EXTENDS()
扩展的类型),除非 Arity
为 0,在这种情况下,Args
必须是 proto::term<T>
,其中 T
可以是任何类型。
proto::basic_expr<>
是一个有效的 Fusion 随机访问序列,其中序列的元素是子表达式。