...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The template push_back_container
is a type used as an attribute customization point. It is invoked by
the Qi repetitive parsers (Kleene,
Plus, List, and Repeat)
to store a parsed attribute value into a container.
#include <boost/spirit/home/support/container.hpp>
Also, see Include Structure.
![]() |
Note |
---|---|
This header file does not need to be included directly by any user program as it is normally included by other Spirit header files relying on its content. |
Name |
---|
|
template <typename Container, typename Attrib, typename Enable> struct push_back_container { static void call(Container& c, Attrib const& val); };
Parameter |
Description |
Default |
---|---|---|
|
The type, |
none |
|
The type, |
none |
|
Helper template parameter usable to selectively enable or disable
certain specializations of |
|
C
A type to be used as a container to store attribute values in.
c
A container instance of type C
.
[Attrib
A type to be used as a container to store attribute values in.
attr
A attribute instance of type Attrib
.
T1
,
T2
, ...Arbitrary types
Expression |
Semantics |
---|---|
push_back_container<C, Attrib>::call(c, attr)
|
Static function that is invoked whenever an attribute value,
|
Spirit predefines specializations of this customization point for several types. The following table lists those types together with the types exposed and the corresponding semantics:
Template Parameters |
Value |
---|---|
|
Store the provided attribute instance |
|
If the provided instance of |
|
If the instance of the variant currently holds a value with a
type, |
|
Do nothing. |
The customization point push_back_container
needs to be implemented for a specific type whenever this type is to
be used as an attribute in place of a STL container. It is applicable
for parsers (Spirit.Qi) only. As a rule of thumb:
it has to be implemented whenever a certain type is to be passed as an
attribute to a parser normally exposing a STL container and if the type
does not expose the interface of a STL container (i.e. no function being
equivalent to c.insert(c.end(), attr)
.
These components have an attribute propagation rule in the form:
a: A --> Op(a): vector<A>
where Op(a)
stands for any meaningful operation on the component a
.
If this customization point is implemented, the following other customization points might need to be implemented as well.
Name |
When to implement |
---|---|
TBD