Общая решаемая проблема:
Система с множеством типов сообщений, передаваемых с разной скоростью (ROS).Для вычисления определенной статистики полезно собрать подмножество сообщений.Сообщения представляют собой информацию временного ряда, поэтому их необходимо собирать в течение некоторого периода времени, а затем передавать в функцию, вычисляющую некоторую статистику.Чтобы упростить использование библиотеки, я выбрал класс, в который я могу помещать произвольные типы сообщений, но чтобы избежать хранения больших сообщений, я хочу хранить только соответствующую информацию, которую пользователь может определить самостоятельно.Приведенный ниже код является моей попыткой определить пользовательские типы с помощью лямбда-функций, которые они предоставляют для сбора данных, которые им интересны.
У меня есть класс, который может хранить экземпляры разных типов, пока яукажите их заранее:
HeterogenousContainer<A,B,C> hc;
hc.access<A>().push_back(A());
hc.access<B>().push_back(B());
Чтобы получить экземпляры, которые будут сохранены, исходные входные данные пройдут через функции преобразования, результаты которых попадут в контейнер выше.
Преобразованиефункции поставляются через список лямбд.То, что я пытаюсь сделать, это вывести типы возврата лямбд и затем инициализировать мой контейнер с этими типами:
template<typename... Ts>
auto create_aggregator(Ts... lambdas)
{
...
HeterogeneousContainer<typename std::result_of<Ts>::type...> hc;
...
}
Компилятор выдает следующую ошибку:
неявная реализациянеопределенного шаблона 'std :: result_of <(лямбда в: 318: 19)>
Возможно ли то, что я пытаюсь сделать?