...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Domain
A Domain creates an association between expressions and a so-called generator, which is a function that maps an expression in the default domain to an equivalent expression in this Domain. It also associates an expression with a grammar, to which all expressions within this Domain must conform.
proto_grammar
Domain::proto_grammar
The grammar to which every expression in this Domain must conform.
proto_generator
Domain::proto_generator
A Unary Polymorphic Function that accepts expressions in the default domain and emits expressions in this Domain.
proto_super_domain
Domain::proto_super_domain
The Domain that is a super-domain of this domain, if any such domain exists. If not, it is some unspecified type.
result_type
boost::result_of<Domain(Expr)>::type
The type of the result of applying
proto_generator
to
the specified expression type. The result is required to
model Expr. The domain type
associated with result_type
(result_type::proto_domain
)
is required to be the same type as this Domain.
as_expr_result_type
Domain::as_expr<Object>::result_type
The result of converting some type to a Proto expression
type in this domain. This is used, for instance, when
calculating the type of a variable to hold a Proto
expression.
as_expr_result_type
models
Expr
.
as_child_result_type
Domain::as_child<Object>::result_type
The result of converting some type to a Proto expression
type in this domain. This is used, for instance, to
compute the type of an object suitable for storage
as a child in an expression tree.
as_child_result_type
models
Expr
.
Name | Expression | Type | Semantics |
---|---|---|---|
Apply Generator |
d(e) |
result_type |
The result of applying |
As Expression |
Domain::as_expr< Object >()(o) |
as_expr_result_type |
The result of converting some object to a Proto expression in this domain. It returns a Proto expression object that is suitable for storage in a variable. It should return a new object, which may be a copy of the object passed in. |
As Child |
Domain::as_child< Object >()(o) |
as_child_result_type |
The result of converting some object to a Proto expression in this domain. It returns an object suitable for storage as a child in an expression tree, which may simply be a reference to the object passed in. |