我输入了不同类型的数组(void**
),
例如两个ints
和chars
数组,我想从它们中创建一个元组数组。
我在编译时未知数组及其类型的数量,所以我不能只是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
我实际上需要一个迭代器的元组,但它是一个等价的问题。
答案 0 :(得分:2)
您需要std::vector
boost::variant
或手动等效。
在编译时使用tuple
执行您所要求的操作会导致指数膨胀,并且很少做正确的事情。虽然我可以编写带有最多10个元素的数组的代码,并使用自定义元组调用函数,但生成的100亿个函数会炸毁编译器:除非你想要二进制文件中的每个函数也要大100亿倍,无论如何我们都要打字删除结果。
作为一般规则,对动态数据使用动态结构:我们有动态长度,因此vector
,数据是从有限集中键入的运行时,因此variant
。