推拉zip_iterator - 是typedef必不可少的?

时间:2013-12-23 17:25:15

标签: cuda thrust

我试着这样做:

thrust::zip_iterator<IteratorTuple> zip;
zip = make_zip_iterator(...)

无法编译,但是当我这样做时:

typedef thrust::zip_iterator<IteratorTupe> ZipIterator;
ZipIterator zip = make_zip_iterator(...)

,我的代码编译完成了我想要的。我的问题是,为什么在这种情况下需要typedef?这种上下文的typedef用法是什么?如果有人认为问题可能在其他地方,我可以发布我的其余代码。

1 个答案:

答案 0 :(得分:1)

原因是:

thrust::zip_iterator<IteratorTuple> zip;
zip = make_zip_iterator(...)

失败是因为thrust::zip_iterator没有默认构造函数。这是一个明智的设计选择,因为未初始化的花式迭代器没有实际用途。包含typedef的版本可以工作,因为在实例化花式迭代器期间使用了复制构造函数。它不是typedef本身的属性。

[这个答案已经从评论中汇总而成,并作为社区维基条目添加,以便将此问题从未答复的队列中删除]。