123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- [/
- / 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]
|