我试着这样做:
thrust::zip_iterator<IteratorTuple> zip;
zip = make_zip_iterator(...)
无法编译,但是当我这样做时:
typedef thrust::zip_iterator<IteratorTupe> ZipIterator;
ZipIterator zip = make_zip_iterator(...)
,我的代码编译完成了我想要的。我的问题是,为什么在这种情况下需要typedef
?这种上下文的typedef
用法是什么?如果有人认为问题可能在其他地方,我可以发布我的其余代码。
答案 0 :(得分:1)
原因是:
thrust::zip_iterator<IteratorTuple> zip;
zip = make_zip_iterator(...)
失败是因为thrust::zip_iterator
没有默认构造函数。这是一个明智的设计选择,因为未初始化的花式迭代器没有实际用途。包含typedef
的版本可以工作,因为在实例化花式迭代器期间使用了复制构造函数。它不是typedef
本身的属性。
[这个答案已经从评论中汇总而成,并作为社区维基条目添加,以便将此问题从未答复的队列中删除]。