13 #include <type_traits> 32 template <
typename TDerived>
44 TDerived& ref() {
return static_cast<TDerived&
>(*this); }
45 const TDerived& ref()
const {
return static_cast<const TDerived&
>(*this); }
49 static bool const is_process_sequence =
false;
50 static bool const is_switch_process_sequence =
false;
62 template <
typename TProcess>
65 std::enable_if_t<std::is_base_of_v<BaseProcess<typename std::decay_t<TProcess>>,
66 typename std::decay_t<TProcess>>>>
72 template <
typename TProcess,
int N>
75 typename std::enable_if_t<is_process_v<std::decay_t<TProcess>> &&
76 !std::decay_t<TProcess>::is_process_sequence>> {
77 static unsigned int constexpr count = N + 1;
traits class to count any type of Process, general version
A traits marker to identify BaseProcess, thus any type of process.
Definition of a static process list/sequence
Each process in C8 must derive from BaseProcess.
static unsigned int constexpr getNumberOfProcesses()
Default number of processes is just one, obviously.
The cascade namespace assembles all objects needed to simulate full particles cascades.