Zim*_*ano 4 c++ qt templates dependent-name class-template
在我的for循环中声明迭代器时研究无符号与有符号整数比较警告时,我读到了这个:
尽可能使用您要比较的确切类型(例如,
std::string::size_type与std::string长度比较时使用).
我QList<T>想要迭代,使用上面的方法声明迭代器:
for(QList::size_type i = 0; i < uploads.size(); i++)
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个编译器错误:
error: 'template<class T> class QList' used without template parameters
for(QList::size_type i = 0; i < uploads.size(); i++)
Run Code Online (Sandbox Code Playgroud)
为什么我不能以同样的方式使用它?这是由我还是由Qt框架及其类型引起的?QList::size_type在这种情况下,什么是一个很好的替代品,QList::size()只需返回一个常规的旧的int,我想使用它; 但我读了上面链接的帖子,这让我不确定.
QList是一个类模板,这意味着你应该在使用它时指定模板参数,例如QList<int>和QList<int>::size_type.
BTW:std::string是std :: basic_string的实例化,它是一个定义为的typedef std::basic_string<char>.所以std::string::size_type等同于std::basic_string<char>::size_type事实上.
你不能以同样的方式使用它,因为它们不是同一个东西.A std::string实际上是别名std::basic_string<char>,这就是您在使用它时不必指定模板类型的原因.
由于Qlist不是别名,因此您必须使用模板类型
QList<some_type>::size_type
Run Code Online (Sandbox Code Playgroud)
你可以做的一件事就是制作自己的别名
using QIntList = QList<int>;
Run Code Online (Sandbox Code Playgroud)
然后你就可以了
QIntList::size_type
Run Code Online (Sandbox Code Playgroud)