Ленивый вызов
От: swingus  
Дата: 08.04.15 16:28
Оценка:
Есть кортеж объектов вида (псевдокод):


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() для разных структур не совпадают сигнатуры. Вопрос, можно ли сделать ленивый вызов метода?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.