- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
virtual QModelIndex parent(const QModelIndex &child) const = 0;
virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0;
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0;
virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
virtual QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
int role = Qt::EditRole);
virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
virtual QStringList mimeTypes() const;
virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent) const;
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent);
ну, вы поняли. они написали тысячи говнокода и говорят, что это круто.
они написали говно-пример, и говорят, что это круто.
а вы что думаете по этому поводу?
kipar 29.10.2014 15:47 # 0
guest 29.10.2014 15:58 # −3
FadeToBlack 29.10.2014 18:52 # −1
Xom94ok 29.10.2014 22:09 # +2
FadeToBlack 30.10.2014 06:11 # 0
вот именно. программисты на си любят свитчи. они сваливают все мыслимые и не мыслимые данные в один объект, а потом делвают switch_case по типу. и это функциональный подход. наследование и полиморфим в ооп были созданы имеено с целью избавиться от такого подхода. но тут я вижу "возвращение к истокам", и получается клубок какого-то неадекватного кода.
roman-kashitsyn 30.10.2014 09:28 # +1
bormand 30.10.2014 11:08 # 0
switch удобнее, когда добавляются новые методы, но не типы.
visitor удобнее, когда добавляются новые типы, но не методы.
А общего решения в крестах, походу, нет и не будет. wvxvw может злорадно смеяться.
roman-kashitsyn 30.10.2014 11:16 # +1
Когда добавляются новые типы, но не методы - это типичный ООП с Triangle extends Shape.
Оба подхода решают одну и ту же задачу - добавление новых "виртуальных" методов к фиксированной иерархии/набору типов. При увеличении числа типов оба подхода ведут к страданиям.
У визитора visit(Base&), у switch - default.
Зато в switch управление у тебя - прерываешь обход дерева когда захочешь. А визитор - реинкарнация сраных коллбеков.
bormand 30.10.2014 11:27 # +1
Визитор нинужен.
Анонимус 30.10.2014 16:00 # 0
1) позволяет делать дефалтное поведение для необработанного типа
2) может требовать всех поддержать новый тип (тупо не скомпилится)
3) кастов там нет, но безопастность тут не главное
roman-kashitsyn 30.10.2014 16:13 # +1
2) Не всегда плюс, да и несколько противоречит пункту 1, не так ли?
Алсо, в случае енумов компилятор тоже эмитит ворнинги для неразобранных кейсов без дефолта.
3) Да, в свитче нужны касты. С другой стороны, не требуется наследование и виртуальные методы и питушня с свойным диспатчингом. Олсо, ациклический визитор в стиле александреску всё же требует дайнэмик каст.
defecate-plusplus 30.10.2014 11:35 # +2
последние-то без кастов не разрулить
зубов бояться - в рот не давать, возразит публика, и будет по-своему права
bormand 30.10.2014 11:38 # 0
Ты так говоришь, как-будто в визиторе-по-типам нет кастов... Они там всяко есть, просто инкапсулированы.
roman-kashitsyn 30.10.2014 12:48 # 0
Мне в принципе нравится гошный подход
https://golang.org/doc/effective_go.html#type_switch
Хотел как-то визитор в Go написать, но потом одумался и осознал.
bormand 30.10.2014 12:58 # 0
Если его юзать как typeswitch для полиморфного контейнера - будут. Или я сегодня туплю?
defecate-plusplus 30.10.2014 13:02 # 0
не путай с boost::any
roman-kashitsyn 30.10.2014 13:11 # 0
roman-kashitsyn 30.10.2014 13:08 # +1
bormand 30.10.2014 13:58 # 0
Desktop 21.08.2022 13:31 # 0
RoniakiaGovno 21.08.2022 13:38 # 0
bormand 30.10.2014 10:47 # 0
А в более обобщенных случаях реализация модельки не напрягает, ибо один раз.
roman-kashitsyn 30.10.2014 11:01 # 0
Со стороны похоже на жабу, кругом унылое ооп и сырые указатели, но хотя бы не требует долбанутого препроцессора как qt.
bormand 30.10.2014 11:05 # 0
guest 29.10.2014 19:33 # −4