Boost C++ Libraries Article Index for
Boost C++
Website Links For
Libraries
 

Information About

Boost C++ Libraries




  Caption Boost logo
  Latest Release Version 1341
  Latest Release Date 24 July 2007
  Genre Application Framework
  License Boost Software License
  Website http://wwwboostorg/


The Boost C++ Libraries are a collection of projects. Many of Boost's founders are on the C++ Standard committee and several Boost libraries have been accepted for incorporation into the Technical Report 1 of C++0x .http://www.open-std.org/jtc1/sc22/wg21/docs/library_technical_report.html

The libraries are aimed at a wide range of C++ users and application domains. They range from general-purpose libraries like SmartPtr , to OS Abstractions like FileSystem , to libraries primarily aimed at other library developers and advanced C++ users, like MPL .

In order to ensure efficiency and flexibility, Boost makes extensive use of Template s. Boost has been a source of extensive work and research into Generic Programming and Metaprogramming in C++.


LIBRARIES


Boost provides extension libraries in the following areas:
  • Algorithms

  • Concurrent programming ( Threads )

  • Containers

  • --- array - Management of fixed-size arrays with STL container semantics

  • --- Boost Graph Library (BGL) - Generic graph containers, components and algorithms

  • --- multi-array - Simplifies creation of N-dimensional arrays

  • --- multi-index containers - Containers with built in indexes that allow different sorting and access semantics

  • --- pointer containers - Containers modeled after most standard STL containers that allow for transparent management of pointers to values

  • --- property map - Interface specifications in the form of concepts and a general purpose interface for mapping key values to objects

  • --- variant - A safe and generic stack-based object container that allows for the efficient storage of and access to an object of a type that can be chosen from among a set of types that must be specified at compile time.

  • Correctness and Testing

  • --- concept check - Allows for the enforcement of actual template parameter requirements (concepts)

  • --- static assert - Compile time assertion support

  • --- Boost Test Library - A matched set of components for writing test programs, organizing tests into test cases and test suites, and controlling their runtime execution

  • Data structures

  • --- dynamic_bitset - Dynamic std::bitset-like data structure

  • Function objects and Higher-order Programming

  • --- bind and mem_fn - General binders for functions, function objects, function pointers and member functions

  • --- function - Function object wrappers for deferred calls. Also, provides a generalized mechanism for callbacks

  • --- functional - Enhancements to the function object adapters specified in the C++ Standard Library, including:


  • -- function object traits


  • -- negators


  • -- binders


  • -- adapters for pointers to functions


  • -- adapters for pointers to member functions

  • --- hash - An implementation of the hash function object specified by the C++ Technical Report 1 (TR1). Can be used as the default hash function for unordered associative containers

  • --- lambda - In the spirit of Lambda Abstractions , allows for the definition of small anonymous function objects and operations on those objects at a call site, using placeholders, especially for use with deferred callbacks from algorithms.

  • --- ref - Provides utility class templates for enhancing the capabilities of standard C++ references, especially for use with generic functions

  • --- result_of - Helps in the determination of the type of a call expression

  • --- signals and slots - Managed signals and slots callback implementation

  • Generic Programming

  • Graphs

  • Input/output

  • Interlanguage support (for Python )

  • Iterators

  • --- iterators

  • --- operators - Class templates that help with overloaded operator definitions for user defined iterators and classes that can participate in arithmetic computation.

  • --- tokenizer - Provides a view of a set of tokens contained in a sequence that makes them appear as a container with iterator access

  • Math and Numerics

  • Memory

  • --- pool - Provides a simple segregated storage based memory management scheme

  • --- smart_ptr - A collection of smart pointer class templates with different pointee management semantics


  • -- scoped_ptr - Owns the pointee (single object)


  • -- scoped_array - Like scoped_ptr, but for arrays


  • -- shared_ptr - Potentially shares the pointer with other shared_ptrs. Pointee is destroyed when last shared_ptr to it is destroyed


  • -- shared_array - Like shared_ptr, but for arrays


  • -- weak_ptr - Provides a "weak" reference to an object that is already managed by a shared_ptr


  • -- intrusive_ptr - Similared to shared_ptr, but uses a reference count provided by the pointee

  • --- utility - Miscellaneous support classes, including:


  • -- base from member idiom - Provides a workaround for a class that needs to initialize a member of a base class inside its own (i.e., the derived class') constructor's initializer list


  • -- checked delete - Check if an attempt is made to destroy an object or array of objects using a pointer to an incomplete type


  • -- next and prior functions - Allow for easier motion of a forward or bidirectional iterator, especially when the results of such a motion need to be stored in a separate iterator (i.e., should not change the original iterator)


  • -- noncopyable - Allows for the prohibition of copy construction and copy assignment


  • -- addressof - Allows for the acquisition of an object's real address, bypassing any overloads of operator&(), in the process


  • -- result_of - Helps in the determination of the type of a call expression

  • Miscellaneous

  • Parsers

  • Preprocessor metaprogramming

  • String and text processing

  • --- lexical_cast - Type conversions to/from text

  • --- format - Type safe argument formatting according to a format string

  • --- iostreams - C++ streams and stream buffer assistance for new sources/sinks, filters framework

  • --- regex - Support for regular expressions

  • --- Spirit - An object-oriented recursive-descent parser generator framework

  • --- string algorithms - A collection of various algorithms related to strings

  • --- tokenizer - Allows for the partitioning of a string or other character sequence into Token s

  • --- wave - Standards conformant implementation of the mandated C99 / C++ pre-processor functionality packed behind an easy to use interface

  • Template Metaprogramming

  • --- mpl - A general purpose high-level metaprogramming framework of compile-time algorithms, sequences and metafunctions

  • --- static assert - Compile time assertion support

  • --- type traits - Templates that define the fundamental properties of types

  • Workarounds for broken compilers



EXAMPLES



Linear algebra

Boost includes a Linear Algebra library called uBLAS, with BLAS support for vectors and matrices.

  • Example showing how to multiply a vector with a matrix:

  • #include

#include
#include

using namespace boost::numeric::ublas;

  • "y = Ax" example ---/

  • int main () {

vector x (2);
x(0) = 1; x(1) = 2;

matrix A(2,2);
A(0,0) = 0; A(0,1) = 1;
A(1,0) = 2; A(1,1) = 3;

vector y = prod(A, x);

std::cout << y << std::endl;
return 0;
}


Generating random numbers

Boost provides distribution-independent Pseudorandom Number Generator s and PRNG-independent probability distributions, which are combined to build a concrete generator.

#include

using namespace boost;

double SampleNormal (double mean, double sigma)
{
// Create a Mersenne twister random number generator
// that is seeded once with #seconds since 1970
static mt19937 rng(static_cast (std::time(0)));

// select Gaussian probability distribution
normal_distribution norm_dist(mean, sigma);

// bind random number generator to distribution, forming a function
variate_generator > normal_sampler(rng, norm_dist);

// sample from the distribution
return normal_sampler();
}
See Boost Random Number Library for more details.


Multithreading

Example code that demonstrates creation of threads:
#include
#include
using namespace std;

void hello_world() {
cout << "Hello world, I'm a thread!" << endl;
}


boost::thread my_thread(&hello_world);
// wait for the thread to finish
my_thread.join();

return 0;
}



ASSOCIATED PEOPLE

Original founders of Boost still active in the community include Beman Dawes and David Abrahams . Author of several books on C++, Nicolai Josuttis contributed the Boost array library in 2001. Around 3,000 people are subscribed to Boost mail-list and dozens of them are very active ( As Of 2007 ).


REFERENCES



EXTERNAL LINKS