Dune Core Modules (2.4.1)

Dune::ForLoop< Operation, first, last > Class Template Reference

A static loop using TMP. More...

#include <dune/common/forloop.hh>

Detailed Description

template<template< int > class Operation, int first, int last>
class Dune::ForLoop< Operation, first, last >

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 (as references) can be passed 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;
}
};
Note
Since Dune 2.4, ForLoop uses variadic templates and perfect forwarding and thus supports arbitrary numbers of arguments to apply(), which can be any combination of lvalues and rvalues.

The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Dec 22, 23:30, 2024)