Russian Qt Forum

Qt => Вопросы новичков => Тема начата: deadlineX от Август 17, 2023, 17:13



Название: Как написать функцию Length(QList *)?
Отправлено: deadlineX от Август 17, 2023, 17:13
Доброго времени суток!
Возник вопрос: как написать функцию, возвращающую QList::count(), но именно, как функцию с аргументом (QList *)? Я перевожу большой проект с Delphi на Qt. и первое (ну, почти :)), с чем столкнулся, это как бы так записать Length() и SetLength(), если я в качестве массивов использую QList? Хотелось бы именно универсальные функции, а не для каждого класса свою пару, так-то смысл теряется почти - можно простой заменой пройтись и везде заменить Length(myArray) на myArray.count()... Есть более красивое решение?

-Спасибо.


Название: Re: Как написать функцию Length(QList *)?
Отправлено: Old от Август 17, 2023, 18:59
Код
C++ (Qt)
template<typename Container>
size_t Length( Container c )
{
 return c.size();
}
 


Название: Re: Как написать функцию Length(QList *)?
Отправлено: deadlineX от Август 18, 2023, 04:35
Спасибо!
И то есть, получается, что при такой записи без разницы, что передавать в аргумент - экземпляр класса или указатель на него?
То есть, если передать (QList *myArray), то оно преобразуется в myArray->size() ?


Название: Re: Как написать функцию Length(QList *)?
Отправлено: kambala от Август 18, 2023, 09:33
нет, указатель так не передашь. а зачем передавать массив как указатель? в случае с Qt контейнерами их можно передавать по значению


Название: Re: Как написать функцию Length(QList *)?
Отправлено: deadlineX от Август 18, 2023, 18:05
OK, принято.
Там еще не очень понятно с оператором [].
Допустим, элементом листа является некая структура.
Когда делается resize(), эти элементы заполняются нулями?
Или там просто кусок памяти с мусором в каждом элементе?
И допустим также. что одно из полей структуры тоже QList<T>.
Это поле никак не надо предварительно инициализировать? Его сразу можно использовать, например тоже ему делать resize()?


Название: Re: Как написать функцию Length(QList *)?
Отправлено: kambala от Август 18, 2023, 21:51
вызовется конструктор по умолчанию в обоих случаях


Название: Re: Как написать функцию Length(QList *)?
Отправлено: deadlineX от Август 19, 2023, 04:26
вызовется конструктор по умолчанию в обоих случаях
Простите мне мою необразованность, но что является конструктором для структуры?
У меня там везде элементами массива (который QList) являются не классы, а структуры.
Или это сейчас уже не важно с точки зрения компилятора?
С тех пор, как у структур появились методы, все смешалось... :)


Название: Re: Как написать функцию Length(QList *)?
Отправлено: sergek от Август 19, 2023, 14:26
Структура в C++ - это класс с открытыми по умолчанию членами ))