mirror of
https://github.com/pineappleEA/pineapple-src.git
synced 2025-01-22 03:04:05 -05:00
70 lines
2.7 KiB
Plaintext
70 lines
2.7 KiB
Plaintext
|
[/
|
||
|
/ Copyright (c) 2008 Eric Niebler
|
||
|
/
|
||
|
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||
|
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||
|
/]
|
||
|
|
||
|
[/================================]
|
||
|
[section:naming Naming Conventions]
|
||
|
[/================================]
|
||
|
|
||
|
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.
|
||
|
|
||
|
[/================]
|
||
|
[heading Functions]
|
||
|
[/================]
|
||
|
|
||
|
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.
|
||
|
|
||
|
[/====================]
|
||
|
[heading Metafunctions]
|
||
|
[/====================]
|
||
|
|
||
|
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.
|
||
|
|
||
|
[/=======================]
|
||
|
[heading Function Objects]
|
||
|
[/=======================]
|
||
|
|
||
|
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.
|
||
|
|
||
|
[/===========================]
|
||
|
[heading Primitive Transforms]
|
||
|
[/===========================]
|
||
|
|
||
|
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 Proto Naming Conventions
|
||
|
[[Entity] [Example] ]
|
||
|
[[Free Function] [`boost::proto::value()`] ]
|
||
|
[[Metafunction] [`boost::proto::result_of::value<>`] ]
|
||
|
[[Function Object] [`boost::proto::functional::value`] ]
|
||
|
[[Transform] [`boost::proto::_value`] ]
|
||
|
]
|
||
|
|
||
|
[endsect]
|
||
|
|