CUDA推力重载迭代器不适用于模板类

时间:2016-05-20 11:17:55

标签: c++ templates cuda

我需要根据推力设备向量创建一个模板类。但是,如果类是模板,我不能重载迭代器。有人知道我怎么能解决这个问题吗?似乎迭代器类型不是模板。我还不确定它是如何实现的。

不工作:

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>

template <class Type>
class F2DArray : public thrust::device_vector<Type> {
  iterator GetRowBegin(const unsigned int &y) {
    assert(y < iHeight);
    return begin()+y*iWidth;
  }

  iterator GetRowEnd(const unsigned int &y) {
    assert(y < iHeight);
    return begin()+y*iWidth+iWidth;
  }

  const_iterator GetRowBegin(const unsigned int &y) const {
    assert(y < iHeight);
    return begin()+y*iWidth;
  }

  const_iterator GetRowEnd(const unsigned int &y) const {
    assert(y < iHeight);
    return begin()+y*iWidth+iWidth;
  }
};

错误:

error: identifier "iterator" is undefined
error: identifier "iterator" is undefined
error: identifier "const_iterator" is undefined
error: identifier "const_iterator" is undefined

工作

class F2DArray : public thrust::device_vector<float> {
  iterator GetRowBegin(const unsigned int &y) {
    assert(y < iHeight);
    return begin()+y*iWidth;
  }

  iterator GetRowEnd(const unsigned int &y) {
    assert(y < iHeight);
    return begin()+y*iWidth+iWidth;
  }

  const_iterator GetRowBegin(const unsigned int &y) const {
    assert(y < iHeight);
    return begin()+y*iWidth;
  }

  const_iterator GetRowEnd(const unsigned int &y) const {
    assert(y < iHeight);
    return begin()+y*iWidth+iWidth;
  }
};

0 个答案:

没有答案