...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
cons is a simple Forward Sequence. It is a lisp style recursive list structure where car is the head and cdr is the tail: usually another cons structure or nil: the empty list. Fusion's list is built on top of this more primitive data structure. It is more efficient than vector when the target sequence is constructed piecemeal (a data at a time). The runtime cost of access to each element is peculiarly constant (see Recursive Inlined Functions).
#include <boost/fusion/container/list/cons.hpp> #include <boost/fusion/include/cons.hpp>
template <typename Car, typename Cdr = nil> struct cons;
Parameter |
Description |
Default |
---|---|---|
Car |
Head type |
|
Cdr |
Tail type |
nil |
Notation
An empty cons
A cons type
Instances of cons
An arbitrary data
Another cons list
Semantics of an expression is defined only where it differs from, or is not defined in Forward Sequence.
Expression |
Semantics |
---|---|
nil() |
Creates an empty list. |
C() |
Creates a cons with default constructed elements. |
C(car) |
Creates a cons with car head and default constructed tail. |
C(car, cdr) |
Creates a cons with car head and cdr tail. |
C(s) |
Copy constructs a cons from a Forward Sequence, s. |
l = s |
Assigns to a cons, l, from a Forward Sequence, s. |
at<N>(l) |
The Nth element from the beginning of the sequence; see at. |
cons<int, cons<float> > l(12, cons<float>(5.5f)); std::cout << at_c<0>(l) << std::endl; std::cout << at_c<1>(l) << std::endl;