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