Есть кортеж объектов вида (псевдокод):
struct s0
{
int id = 0;
int exec(int) { return 0; }
};
struct s1
{
int id = 1;
int exec(int, char const *) { return 1; }
};
using ss = boost::fusion::vector<s0, s1>;
Я пытаюсь сделать такой вызов:
template <typename... TArgs>
int call(int id, TArgs &&... args)
{
int res{-1};
ss ss_;
find_by_id // некий алгоритм, который может искать runtime в кортежах, и
// в случае нахождения, выполняет лямбду
(
ss_,
id,
[&res, &args](auto const &s)
{
res = s.exec(std::forward<TArgs>(args)...);
}
);
return res;
}
int main()
{
call(1, "abc");
return 0;
}
Этот код не скомпилируется, так как у методов exec() для разных структур не совпадают сигнатуры. Вопрос, можно ли сделать ленивый вызов метода?