Как я могу преобразовать пакет аргументов шаблонов переменных в пакеты разных типов? - PullRequest
0 голосов
/ 11 декабря 2018

Общая решаемая проблема:

Система с множеством типов сообщений, передаваемых с разной скоростью (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)>

Возможно ли то, что я пытаюсь сделать?

...