Russian Qt Forum
Ноябрь 21, 2024, 22:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как написать функцию Length(QList *)?  (Прочитано 1916 раз)
deadlineX
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« : Август 17, 2023, 17:13 »

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

-Спасибо.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Август 17, 2023, 18:59 »

Код
C++ (Qt)
template<typename Container>
size_t Length( Container c )
{
 return c.size();
}
 
Записан
deadlineX
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #2 : Август 18, 2023, 04:35 »

Спасибо!
И то есть, получается, что при такой записи без разницы, что передавать в аргумент - экземпляр класса или указатель на него?
То есть, если передать (QList *myArray), то оно преобразуется в myArray->size() ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Август 18, 2023, 09:33 »

нет, указатель так не передашь. а зачем передавать массив как указатель? в случае с Qt контейнерами их можно передавать по значению
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
deadlineX
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #4 : Август 18, 2023, 18:05 »

OK, принято.
Там еще не очень понятно с оператором [].
Допустим, элементом листа является некая структура.
Когда делается resize(), эти элементы заполняются нулями?
Или там просто кусок памяти с мусором в каждом элементе?
И допустим также. что одно из полей структуры тоже QList<T>.
Это поле никак не надо предварительно инициализировать? Его сразу можно использовать, например тоже ему делать resize()?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Август 18, 2023, 21:51 »

вызовется конструктор по умолчанию в обоих случаях
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
deadlineX
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #6 : Август 19, 2023, 04:26 »

вызовется конструктор по умолчанию в обоих случаях
Простите мне мою необразованность, но что является конструктором для структуры?
У меня там везде элементами массива (который QList) являются не классы, а структуры.
Или это сейчас уже не важно с точки зрения компилятора?
С тех пор, как у структур появились методы, все смешалось... Улыбающийся
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #7 : Август 19, 2023, 14:26 »

Структура в C++ - это класс с открытыми по умолчанию членами ))
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.162 секунд. Запросов: 22.