Simply put, when I opt for a data-driven design, I separate the data from the behavior. Given an input as
struct Input { int value; };
I pass it to some components that operate on it. I… call some functions.
void set(Input& in, int value) { input.value = value; } void reset(Input& in) { input.value = 0; } Input in{}; set(in, 2); reset(in);
Because life is better with patterns, I’d want to have independent and configurable functions and a clear intent of their role and usage. Short story, a way to do this is a list of functions to be called with an input.
template<typename T, typename... Fs> void apply(T& in, Fs&&... fs) { (fs(in), ...); }
I’ve used the C++17 fold expression to unpack the template parameters (the list of functions). Continue reading Calling multiple functions for an input