Скажем, у меня есть три класса, ClassA
, ClassB
и ClassC
.И все три из этих классов имеют функцию с именем updateValue(int)
.И тогда у меня есть класс контроллера под названием Controller
.Конструктор Who имеет следующий шаблон:
class Controller
{
public:
template <class...Classes>
Controller(Classes & ...classes); // maybe initialize a tuple?
void setValues(int val)
{
// unpack whatever data structure and call each classes updateValue(int)
}
private:
std::tuple<Classes...classes> packedClasses; // Not sure if this is good idea? This will not compile
};
Как видите, я хочу иметь возможность брать классы из некоторой структуры данных и вызывать их функции.Например, в main у меня будет:
int main()
{
ClassA A;
ClassB B;
ClassC C;
Controller controller1(A,B);
Controller controller2(A,C);
Controller controller3(B,C);
Controller controller4(A,B,C);
controller4.setValues(20);
}
Каждый класс имеет свой собственный способ обновления значения, например, ClassA
имеет setValue(int)
, ClassB
имеет setInt(int)
и ClassC
имеет updateNumber(int)
.Мой план состоит в том, чтобы написать функцию updateValue
в каждый из этих классов, который будет вызывать их функции-установщики.Тем не менее, я не уверен, как добиться того, что я пытаюсь сделать.Как мне распаковать все классы и вызвать их функцию updateValue(int)
?