Почему я не могу использовать QList::size_type, как я бы использовал std::string::size_type? (ошибка параметра шаблона)
При исследовании предупреждения сравнения целых чисел без знака и со знаком при объявлении итератора в цикле for я прочитал это:
По возможности используйте точный тип, с которым вы будете сравнивать (например, используйте
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 ответа
QList
шаблон класса, это означает, что вы должны указать аргумент шаблона при его использовании, например QList<int>
а также QList<int>::size_type
,
КСТАТИ: std::string
является экземпляром std:: basic_string, который является typedef, определенным как std::basic_string<char>
, Так 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>;
И тогда вы можете ise
QIntList::size_type