Russian Qt Forum

Qt => Общие вопросы => Тема начата: Павел_F. от Октябрь 28, 2009, 12:03



Название: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 12:03
Нужем список с ограничением на минимальное и максимальное кол-во элементов. Причем нужен именно шаблон списка потому что нужно списки десятка разных типов. Cмотрю в сторону QList и не вижу нужного ( именно ограничений в размерах). Как прикрутить? Может есть у кого идеи?


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: lit-uriy от Октябрь 28, 2009, 12:10
не пойму зачем? Что будет если список полон, а ты вызываешь append() или insert()?


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 13:08
Если список полон а я добавляю элементы нужно будет вернуть false и ничего не делать. Ровно как и когда вызываеш например removeAt() или removeLast() а список уже достиг минимума. Сам уже думал на тему целесообразности использовать список. Но если использовать массив то придется что-то динамическое мудрить ( максимум и минимум могут меняться в процессе работы) и придется что-то изобретать для передачи этого в нормальный список ( у библиотечной функции, которую я не обойду, на  входе QList), в результате от списка не уйдеш, он "дан свыше", а допонительная сложность возникнет.


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: BRE от Октябрь 28, 2009, 13:20
Можно примерно так:
Код
C++ (Qt)
template <class T, int minCount, int maxCount>
class LimitList
{
public:
bool add( const T &item )
{
if( m_list.size() >= maxCount )
return false;
 
m_list.append( item );
return true;
}
 
bool remove(...)
{
}
 
private:
QList<T> m_list;
};
 

Только при конструировании этого объекта нужно в него minCount элементов каких-то добавлять.


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: BRE от Октябрь 28, 2009, 13:22
( максимум и минимум могут меняться в процессе работы)
Сейчас заданы жОстко, но можно и переменные использовать.


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 13:44
Немного переделал.
file.h:
Код:
  
template <class T>
  class LimitList
  {
    public:
      LimitList();
      bool add( const T &item );      
    private:
      int maxCount;
      QList<T> m_list;
  };
file.cpp:
Код:
template<class T>
LimitList< T>::LimitList()
{
  maxCount = 10;
}

template <class T>
bool LimitList< T>::add( const T &item )
{
  if( m_list.size() >= maxCount )
    return false;
  
  m_list.append( item );
  return true;
}
файл проекта делал qmake -project и qmake - file.pro для makefile.
Объектник собирается нормально но приложение не линкуется.
Цитировать
test.o: In function `test::test(QWidget*)':
test.cpp:(.text+0xabd): undefined reference to `LimitList<int>::LimitList()'
test.o: In function `test::test(QWidget*)':
test.cpp:(.text+0x164d): undefined reference to `LimitList<int>::LimitList()'
collect2: выполнение ld завершилось с кодом возврата 1
Что ему не так?


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: BRE от Октябрь 28, 2009, 13:45
Это шаблон, сделай все в файле .h


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 13:51
Спасибо, заработало. А с шаблонами вообще в *.cpp  не перетащиш? А то много функций в *.h файле "не красиво"...


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: BRE от Октябрь 28, 2009, 14:14
Спасибо, заработало. А с шаблонами вообще в *.cpp  не перетащиш? А то много функций в *.h файле "не красиво"...
http://www.forum.crossplatform.ru/index.php?showtopic=3591&st=0&start=0


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 14:23
О, спасибо еще раз. Теперь все ясно.
Кстати, вы в той теме по ссылке писали что не встречали реализацию через inline. Покурил исходники QList и там оба подхода реализованы...


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: BRE от Октябрь 28, 2009, 14:27
О, спасибо еще раз. Теперь все ясно.
Кстати, вы в той теме по ссылке писали что не встречали реализацию через inline. Покурил исходники QList и там оба подхода реализованы...
Второй вариант имеется ввиду с реализацией в файле .cpp


Название: Re: как ограничить кол-во элементов в QList или ему подобных
Отправлено: Павел_F. от Октябрь 28, 2009, 14:41
Видимо не до конца понятно... Ладно, задача решена. Пойду покурю книжку про шаблоны и как их едят.