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