Suppose we have two sorts of classes
- an input class
Input
- defines a type
result_type
- defines
set(result_type)
- defines a type
- an output class
Output
- defines a type
result_type
- defines
result_type get() const
- has a number of
Input
classes as member variables, on which its output depends
- defines a type
Given an output class and several input classes (arbitrary number), consider the following procedure:
- loop over each input class and call
set()
with an appropriate value (defined beforehand) - call the
get()
on the ouput class and collect the result.
This procedure can be seen as a call to a function taking the input's values as arguments an returning the output value.
Write the functor that constructs such a variadic function in the general case.
Constraints are: C++ (most likely C++11), arbitrary number of input classes of possibly different Input::result_type
s. Note that Input::result_type
is not necessarily related to Output::result_type
. Aim should first be efficiency, but there's a big bonus if the code is elegant and readable.
Details: For those who wonder how Output
is related to Input
, one could imagine that Input
has a result_type get() const
method as well, which returns whatever you provided via set()
. Output
then has a constructor that takes various Input
s, and stores them (or their reference) as member variables. Output::get()
then does some math by using the return values of its input's get()
methods, and returns some result of type Output::result_type
.