У меня есть класс, у которого есть сигнал с этой подписью:
// CLASS A
signals:
void requestToChangeRange(voltage_range_e vr, current_range_e cr, uint16_t bits);
Есть другой класс, у которого есть слот, подобный этому (обратите внимание на дополнительный параметр)
// CLASS C
public slots:
void handleRequestRangeChange(voltage_range_e vr, current_range_e cr, uint16_t bits, uint16_t limiter);
Тогда у меня есть класс "B", который служит местом встречи всех других классов. Когда класс «A» излучает сигнал, класс «C» должен перенаправить его в класс «B». Но этот дополнительный аргумент в слоте класса "B" является проблемой, потому что этот дополнительный аргумент исходит от другого класса "X".
Таким образом, если бы сигналы и слоты классов "A" и "C" совпадали, я бы сделал следующее в классе "B":
// somewhere in CLASS B (the manager of all other classes)
connect(pClassA, &ClassA::requestToChangeRange,
pClassC, &ClassC::handleRequestRangeChange);
Но очевидно, что это не работает из-за сигнатур функций. Что я хочу сделать, это что-то вроде:
// somewhere in CLASS B (the manager of all other classes)
connect(pClassA, &ClassA::requestToChangeRange,
this /* class B */, []() {
// Get that last required parameter from class X
uint16_t limiter = pClassX->getValue();
// Call slot of class C
pClassC->handleRequestRangeChange(vr, cr, bits, limiter);
});
Так как я могу получить доступ к этим переданным параметрам внутри лямбды? Это вообще возможно?