Обычно я использую лямбда-функции для установки обратных вызовов к функциям-членам для сторонних библиотек. Например:
setCallback([this](auto&& ...x) { handleCallback(std::forward<decltype(x)>(x)...); });
Теперь у меня есть библиотека с перегруженной функцией для установки обратного вызова, что делает эту строку неоднозначной:
#include <functional>
#include <iostream>
class Library
{
public:
typedef std::function<void (int)> IntFunction;
typedef std::function<void (int, int)> IntIntFunction;
void setCallback(IntFunction f) { f_int_ = f; }
void setCallback(IntIntFunction f) { f_int_int_ = f; }
void callCallback(int a, int b) {
if (f_int_) f_int_(a);
if (f_int_int_) f_int_int_(a, b);
}
private:
IntFunction f_int_;
IntIntFunction f_int_int_;
};
class MyClass
{
public:
MyClass() {
//lib.setCallback([this](auto&& ...x) { handleCallback(std::forward<decltype(x)>(x)...); });
lib.setCallback([this](int a, int b) { handleCallback(a, b); });
}
void handleCallback(int a, int b) {
std::cout << "handleCallback: " << a << ", " << b << std::endl;
}
Library lib;
};
int main()
{
MyClass myclass;
myclass.lib.callCallback(2, 3);
return 0;
}
Есть ли способ автоматического вывода правильных аргументовиз функции handleCallback
, чтобы избежать дублирования аргументов функции в лямбде?