![]() |
Home | Libraries | People | FAQ | More |
As we saw with the Calculator example from the Introduction, the simplest way to get an EDSL up and running is simply to define some terminals, as follows.
// Define a literal integer Proto expression. proto::terminal<int>::type i = {0}; // This creates an expression template. i + 1;
With some terminals and Proto's operator overloads, you can immediately start creating expression templates.
Defining terminals -- with aggregate initialization -- can be a little
awkward at times. Proto provides an easier-to-use wrapper for literals
that can be used to construct Protofied terminal expressions. It's called
proto::literal<>
.
// Define a literal integer Proto expression. proto::literal<int> i = 0; // Proto literals are really just Proto terminal expressions. // For example, this builds a Proto expression template: i + 1;
There is also a proto::lit()
function for constructing
a proto::literal<>
in-place. The above
expression can simply be written as:
// proto::lit(0) creates an integer terminal expression proto::lit(0) + 1;