![](/img/trans.png)
[英]Why text.size() returns std::size_t and not std::string::size_type
[英]Why can't I use QList::size_type as I would std::string::size_type? (template parameter error)
在我的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
。
BTW: 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.