晚上好,我正在尝试制作一个模板化的类,该类将有两个成员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/

10-11 23:14
查看更多