![]() |
Home | Libraries | People | FAQ | More |
Proto is a large library and probably quite unlike any library you've used before. Proto uses some consistent naming conventions to make it easier to navigate, and they're described below.
All of Proto's functions are defined in the boost::proto
namespace. For example, there is a function called value()
defined in boost::proto
that accepts a terminal expression and returns the terminal's value.
Proto defines metafunctions that correspond to each
of Proto's free functions. The metafunctions are used to compute the functions'
return types. All of Proto's metafunctions live in the boost::proto::result_of
namespace and have the same name as the functions to which they correspond.
For instance, there is a class template boost::proto::result_of::value<>
that you can use to compute the
return type of the boost::proto::value()
function.
Proto defines function object equivalents of all of
its free functions. (A function object is an instance of a class type that
defines an operator()
member function.) All of Proto's function object types are defined in the
boost::proto::functional
namespace and have the same
name as their corresponding free functions. For example, boost::proto::functional::value
is a class that defines a function
object that does the same thing as the boost::proto::value()
free function.
Proto also defines primitive transforms -- class types
that can be used to compose larger transforms for manipulating expression
trees. Many of Proto's free functions have corresponding primitive transforms.
These live in the boost::proto
namespace and their names have a leading underscore. For instance, the
transform corresponding to the value()
function is called boost::proto::_value
.
The following table summarizes the discussion above:
Table 1.1. Proto Naming Conventions
Entity |
Example |
---|---|
Free Function |
|
Metafunction |
|
Function Object |
|
Transform |
|