Skip to content
Snippets Groups Projects
properties.md 9.55 KiB
title: The DuMuX property system
subtitle: Flexible compile-time parameters

Parameters vs. properties

Parameters vs. properties

  • Parameters are set at run-time

    A default value may be used if the user does not provide one at run-time

  • Properties are known and set at compile-time

    Can be used e.g. as template parameters (__types__ or values with `constexpr` specifier); No run-time penalty, enable compiler to optimize

Template parameters

  • C++ supports generic programming via templates
    • e.g. classes defined in terms of other types
    • concrete versions of templates are stamped out upon compilation
  • Flexible: implementation not restricted to concrete types
  • Efficient: decisions made at compile-time

Template parameters

An example - std::vector

// Declaration of the class template, usable with any
// `T` that fulfills the requirements that `vector` poses on it.
template<typename T, typename A = std::allocator<T>>
class vector;


// Instantiation of a concrete vector - a vector of ints.
// The compiler will define this concrete type for us,
// using the definition of the class template.
std::vector<int> v;

Template parameters

An example - std::vector

Template specializations

Template implementations can be specialized for concrete types

template<typename T>
class MyVector
{
    // Generic implementation for any T
};

template<>
class MyVector<int>
{
    // specialized implementation for `int`
};

Too many template parameters

For some classes, providing all template parameters can be very cumbersome and error-prone.

// Example from dune-pdelab. 9 template parameters!
using GOF0 = Dune::GridOperator<
    GFS, GFS, LOP, MBE,
    RF, RF, RF,
    CF, CF
>;

DGGO2 dggo2(gfs, cd, gfs, cf, lop, mbe);

Traits classes

A usual way to group template parameters