晚上好,我正在尝试制作一个模板化的类,该类将有两个成员const_iterators指向 vector 的一个子节的开头和结尾。我想使该类通用,以便可以将其用于任何类型的 vector 。
我的类定义在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模板参数。有人可以帮忙解释一下发生了什么,还是给我提供了很好的资源?谢谢。
最佳答案
尝试将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 )
{}
};
您以前作为成员和构造函数参数所拥有的
不是
Types
要解决此问题,成员的模板参数列表以及构造函数参数仅需要模板类型
<T>
要使
const_iterator
成为类型,您需要将它们声明为typename
typename std::vector<T>::const_iterator name;
关于c++ - 构造函数参数列表中的无效模板参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49090829/