为什么我不能使用QList :: size_type,因为我会使用std :: string :: size_type? (模板参数错误)

时间:2017-06-22 14:08:16

标签: c++ qt templates class-template dependent-name

在我的for循环中声明迭代器时研究无符号与有符号整数比较警告,I read this

  

尽可能使用您要比较的确切类型(例如,与std::string::size_type的长度进行比较时使用std::string

我有一个QList<T>我想迭代,使用上面的方法声明迭代器:

 for(QList::size_type i = 0; i < uploads.size(); i++)
 {
     //Do something
 }

它给了我一个编译器错误:

error: 'template<class T> class QList' used without template parameters
for(QList::size_type i = 0; i < uploads.size(); i++)

为什么我不能以同样的方式使用它?这是由我还是由Qt框架及其类型引起的?在这种情况下,QList::size_type的唯一替代是QList::size(),只返回常规的旧int,我想使用它;但我读了上面链接的帖子,这让我不确定。

2 个答案:

答案 0 :(得分:7)

QList是一个类模板,这意味着您应该在使用时指定模板参数,例如: QList<int>QList<int>::size_type

BTW:std::stringstd::basic_string的实例化,它是一个定义为std::basic_string<char>的typedef。因此,std::string::size_type实际上相当于std::basic_string<char>::size_type

答案 1 :(得分:6)

你不能以同样的方式使用它,因为它们不是同一个东西。 std::string实际上是std::basic_string<char>的别名,这就是您在使用时不必指定模板类型的原因。

由于Qlist不是别名而且是模板类型,因此您必须使用

QList<some_type>::size_type

你可以做的一件事就是制作自己的别名,比如

using QIntList = QList<int>;

然后你可以

QIntList::size_type