我需要根据推力设备向量创建一个模板类。但是,如果类是模板,我不能重载迭代器。有人知道我怎么能解决这个问题吗?似乎迭代器类型不是模板。我还不确定它是如何实现的。
不工作:
#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;
}
};