![]() |
Home | Libraries | People | FAQ | More |
This section explains how programmers can setup their system to use this library.
Programmers should have enough knowledge to use this library after reading the Introduction, Getting Started, and Tutorial sections. The Advanced Topics and Reference sections can be consulted at a later point to gain a more advanced knowledge of the library. All the other sections of this documentation can be considered optional.
Some footnotes are marked by the word "Rationale". They explain reasons behind decisions made during the design and implementation of this library.
In some of the examples presented in this documentation, the Boost.Test
macro BOOST_CHECK is used
equivalently to assert and
the Boost.Test macro
BOOST_AUTO_TEST_CASE is used
equivalently to main. [3]
The implementation of this library uses preprocessor and template meta-programming (as supported by Boost.Preprocessor and Boost.MPL), templates with partial specializations and function pointers (similarly to Boost.Function). As a consequence, this library is fairly demanding on compilers' compliance with the C++03 standard. At present, this library has been successfully compiled and tested on the following compilers and platforms:
-std=c++0x)
on Cygwin.
This library has not yet been tested on any other compiler and platform.
This library is composed of header files only. Therefore there is no pre-compiled
object file which needs to be installed or linked. Programmers can simply
instruct the C++ compiler where to find the library header files (-I option
for GCC, /I
option for MSVC, etc) and they can start compiling code using this library.
This library implementation uses a number of Boost libraries among which: Boost.Preprocessor, Boost.ScopeExit, Boost.Typeof, Boost.TypeTraits, and Boost.MPL. These Boost libraries must be properly installed on your system in order for this library to work.
The followings are part of the library private API, they are not documented, and they should not be directly used by programmers: [4]
boost/local_function/aux_/
or boost/local_function/detail/ directory (these header
files should not be directly included by programmers).
boost::local_function::aux
or boost::local_function::detail namespace.
boost_local_function_aux_... or boost_local_function_detail_... (regardless of its namespace).
BOOST_LOCAL_FUNCTION_AUX_... or BOOST_LOCAL_FUNCTION_DETAIL_... (regardless of its namespace).
Some of the library behaviour can be changed at compile-time by defining special configuration macros. If a configuration macro is left undefined, the library will use an appropriate default value for it.
All configuration macros are defined in the header file boost/local_function/config.hpp.
It is strongly recommended not to change the library configuration macro
definitions unless strictly necessary.
[3] Rationale. Using Boost.Test allows to add the documentation examples to the library regression tests so to make sure that the listed examples always compile and run correctly.
[4]
Rationale. This library concatenates symbols
specified by the programmers (e.g., the local function name) with other
symbols (e.g., special prefixes or preprocessor line numbers) to make internal
symbols with unique names to avoid name clashes. These symbols are separated
by the letter "X"
when they are concatenated so they read more easily during debugging (the
underscore character "_"
could not be used instead of the letter "X"
because if the original symbols already contained a leading or trailing
underscore, the concatenation could result in a symbol with double underscores
"__" which is
reserved by the C++ standard). The "aux" symbols are private
to this library while the "detail" symbols can be used within
Boost by other libraries but they are still not part of this library public
API.