晚上好,我正在尝试创建一个模板化的类,它将有两个const_iterators成员指向向量的子部分的开头和结尾。我想让类通用,以便我可以将它用于任何类型的矢量。
我的类定义在ThreadWorker.h文件中,如下所示:
template <typename T>
class VectorWorker
{
public:
VectorWorker<T>() = default;
VectorWorker<T>( std::vector<typename T>::const_iterator begin, std::vector<typename T>::const_iterator end);
void Work() const;
private:
std::vector<typename T>::const_iterator beginIt; /* Stores value of left iterator that defines data for this worker */
std::vector<typename T>::const_iterator endIt; /* Stores value of right iterator that defines data for this worker */
};
当我尝试编译我的代码时,我收到一条错误,指出模板参数无效:
error: template argument 1 is invalid
VectorWorker<T>( std::vector<typename T>::const_iterator begin, std::vector<typename T>::const_iterator end);
我不太明白为什么我收到此错误,因为我通过“typename”关键字指定T是typename模板参数。任何人都可以帮助解释这里发生了什么,或者指向一个好的资源?感谢。
答案 0 :(得分:1)
尝试移动typename
参数列表之外的template
:
template<typename T>
class VectorWorker {
private:
typename std::vector<T>::const_iterator beginIt;
typename std::vector<T>::const_iterator endIt;
public:
VectorWorker<T>() = default;
VectorWorker<T>( typename std::vector<T>::const_iterator begin, typename std::vector<T>::const_iterator end ) :
beginIt( begin ),
endIt( end )
{}
};
您之前拥有的成员和构造函数参数
std::vector<typename T>::const_iterator beginIt; std::vector<typename T>::const_iterator endIt; std::vector<typename T>::const_iterator begin; std::vector<typename T>::const_iterator end;
不是Types
要解决此问题,成员的模板参数列表以及构造函数参数只需要模板类型<T>
要使const_iterator
成为一种类型,您需要将其声明为typename
typename std::vector<T>::const_iterator name;