Я пытался сделать это:Thrust zip_iterator - является типичным?
thrust::zip_iterator<IteratorTuple> zip;
zip = make_zip_iterator(...)
Это не удалось собрать, но когда я сделал это:
typedef thrust::zip_iterator<IteratorTupe> ZipIterator;
ZipIterator zip = make_zip_iterator(...)
, мой код компилируется и сделал именно то, что я хотел. Мой вопрос: зачем нужен typedef
? И является ли это использование typedef
специфичным для этого контекста? Я могу опубликовать остальную часть моего кода, если кто-то подумает, что проблема могла быть в другом месте.
Typedef - это не единственная разница в ваших примерах. Что делать, если вы не используете typedef, но все же инициализируете 'zip' вместо того, чтобы назначать его позже? Как в 'thrust :: zip_iterator zip = make_zip_iterator (...)'? –
Антон, который работает. Я предполагаю, что с 'thrust :: zip_iterator zip' существует двусмысленность объявления и создания экземпляра? Как это разрешено? –
Нет двусмысленности, но, возможно, 'zip_iterator' не имеет конструктора по умолчанию? Это объясняет проблему. У меня нет опыта работы с библиотекой, которую вы используете, но не указывает ли смысл 'zip_iterator' * нигде * семантически? Если это не так, неудивительно, что они не предоставляют конструктор по умолчанию для него. Затем вы всегда должны инициализировать zip_iterators, а не назначать их позже. –