BDE 4.14.0 Production release
|
Provide a template parameter pack of integers.
This component defines a class template, bslmf::IntegerSequence
, which can be used in parameter pack expansions.
bslmf::IntegerSequence
meets the requirements of the integer_sequence template introduced in the C++14 standard [intseq.intseq] and can be used in a client's code if the compiler supports the C++11 standard.
Note, that this component has no (emulated) support for pre-standard C++11 compilers, as its only purpose is to be used in deduction with template parameter packs. There is no language support to emulate in earlier compilers.
In this section we show intended use of this component.
Suppose we want to initialize a C-Array of known size t_N
with data read from a data source using a library class that provides a variadic template interface that loads a data of variable length into the supplied parameter pack.
First, define a class template DataReader
,
Then, implement a method that loads the specified parameter pack args
with data read from a data source.
Next, for the test purpose provide simple implementation of the recursive variadic read_impl function that streams the index of the C-Array's element to stdout
.
Then, implement the recursion break condition.
Next, define a helper function template readData
that expands the parameter pack of indices t_I
and invokes the variadic template read
method of the specified reader
object.
Finally, define a data
C-Array and reader
variables and pass them to the readData
function as parameters.
Note that using a direct call to the bslmf::IntegerSequence
constructor looks a bit clumsy here. The better approach is to use alias template bslmf::MakeIntegerSequence
, that creates a collection of increasing integer values, having the specified t_N-value length. The usage example in that component shows this method more clearly. But we can not afford its presence here to avoid a cycle/levelization violation.
The streaming operator produces output in the following format on stdout
: