动态大小的推力元组

时间:2014-01-12 12:02:55

标签: c++ templates tuples thrust

我输入了不同类型的数组(void**),

例如两个intschars数组,我想从它们中创建一个元组数组。

我在编译时未知数组及其类型的数量,所以我不能只是thrust::make_tuple,我可以把它分成所有可能性,但因为我可以有10种类型和10个数组将是100个make_tuple的硬编码行。

我正在寻找一种更方便的方法,我尝试了将数组转换为元组的简单示例:

template<typename T>
thrust::tuple<int, T> makeBiggerTuple(T tuple, int* array, int size)
{
    if (size > 1)
        return makeBiggerTuple(thrust::make_tuple(*array, tuple), array++, size - 1);
    return thrust::make_tuple(*array, tuple);
}

但这根本不会编译,因为它会自行扩展,直到发生错误。

那么有什么方法可以避免每个案例都有大量的硬编码线?

P.S

我实际上需要一个迭代器的元组,但它是一个等价的问题。

1 个答案:

答案 0 :(得分:2)

您需要std::vector boost::variant或手动等效。

在编译时使用tuple执行您所要求的操作会导致指数膨胀,并且很少做正确的事情。虽然我可以编写带有最多10个元素的数组的代码,并使用自定义元组调用函数,但生成的100亿个函数会炸毁编译器:除非你想要二进制文件中的每个函数也要大100亿倍,无论如何我们都要打字删除结果。

作为一般规则,对动态数据使用动态结构:我们有动态长度,因此vector,数据是从有限集中键入的运行时,因此variant