正在解决的总体问题:
具有多种类型的消息的系统以不同的速率(ROS)传递。为了计算某些统计信息,收集消息的子集很有用。消息是时间序列信息,因此需要将其收集一段时间,然后传递给函数以计算某些统计信息。为了简化库的使用,我选择了一个类,可以将任意类型的消息推送到该类中,但是为了避免存储大消息,我只想存储相关信息,用户可以自己定义。下面的代码是我尝试通过他们将提供的lambda函数来推断用户定义的类型以收集他们感兴趣的数据的方法。
我有一个可以容纳不同类型实例的类,只要我提前指定它们即可:
HeterogenousContainer<A,B,C> hc;
hc.access<A>().push_back(A());
hc.access<B>().push_back(B());
为了获取要存储的实例,原始输入将经过转换函数,转换结果将进入上方的容器中。
转换功能通过lambda列表提供。我想做的是推导lambda的返回类型,然后用这些类型初始化我的容器:
template<typename... Ts>
auto create_aggregator(Ts... lambdas)
{
...
HeterogeneousContainer<typename std::result_of<Ts>::type...> hc;
...
}
编译器会产生以下错误:
未定义模板'std :: result_of <(lambda at:318:19)>的隐式实例化
我想做的甚至有可能吗?