如何将可变参数模板参数包转换为具有不同类型的包?

时间:2018-12-11 01:55:42

标签: c++ templates c++14 variadic-templates

正在解决的总体问题:

具有多种类型的消息的系统以不同的速率(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)>的隐式实例化

我想做的甚至有可能吗?

0 个答案:

没有答案