为什么我不能像 std::string::size_type 那样使用 QList::size_type? (模板参数错误)

Why can't I use QList::size_type as I would std::string::size_type? (template parameter error)

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

Whenever possible, use the exact type you will be comparing against (for example, use std::string::size_type when comparing with a std::string's length).

我有一个 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() 只是 returns 一个普通的旧 int,我想使用它;但是我读了上面链接的post,这让我不确定。

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

顺便说一句:std::stringstd::basic_string 的实例化,它是定义为 std::basic_string<char> 的 typedef。所以 std::string::size_type 实际上等同于 std::basic_string<char>::size_type

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

因为 Qlist 不是别名,而是您必须使用的模板类型

QList<some_type>::size_type

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

using QIntList = QList<int>;

然后你就可以

QIntList::size_type