为什么我不能像使用 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)

本文关键字:size type 错误 参数 QList std string 不能 为什么      更新时间:2023-10-16

在我的 for 循环中声明迭代器时研究无符号与有符号整数比较警告时,我读到以下内容:

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

我有一个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,我想使用它;但我阅读了上面链接的帖子,这让我不确定。

QList是一个

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

顺便说一句:std::string 是 std::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
相关文章: