A static loop using TMP. More...
#include <dune/common/forloop.hh>
Public Member Functions | |
static_assert ((first<=last),"ForLoop: first > last") | |
Static Public Member Functions | |
template<typename... Args> | |
static void | apply (Args &&...args) |
A static loop using TMP.
The ForLoop takes a
template<int i> class Operation
template argument with a static apply method which is called for i=first...last (first<=last are int template arguments). A specialization for class template class Operation for i=first or i=last is not required. The class Operation must provide a static void function apply(...). Arguments are perfectly forwarded through the ForLoop to this function.
It is possible to pass a subclass to the ForLoop (since no specialization is needed).
Example of usage:
template<class Tuple> struct PrintTupleTypes { template <int i> struct Operation { template<class Stream> static void apply(Stream &stream, const std::string &prefix) { stream << prefix << i << ": " << className<typename tuple_element<i, Tuple>::type>() << std::endl; } }; template<class Stream> static void print(Stream &stream, const std::string &prefix) { // cannot attach on-the-fly in the argument to ForLoop<..>::apply() since // that would yield an rvalue std::string extended_prefix = prefix+" "; stream << prefix << "tuple<" << std::endl; ForLoop<Operation, 0, tuple_size<Tuple>::value-1>:: apply(stream, extended_prefix); stream << prefix << ">" << std::endl; } };
static void Dune::ForLoop< Operation, first, last >::apply | ( | Args &&... | args | ) | [inline, static] |
Dune::ForLoop< Operation, first, last >::static_assert | ( | (first<=last) | , | |
"ForLoop< Operation, first, last >: | first, | |||
last" | ||||
) |