Hallo,
soms heb ik het gevoel dat ik de enige ben met een probleem, dus leg ik het hier maar even voor.
Het komt in mijn sw (heel) vaak voor dat er moet worden gezocht op een struct/klasse met een bepaalde waarde.
Bijvoorbeeld:
Nu wordt ik er een beetje moe van om voor elke struct/klasse elke keer voor alle member variabele die als 'key' dienen weer een search loopje te gaan schrijven. Dat moet slimmer kunnen.
Hoe lossen jullie dit op?
Zelf had ik het volgende in gedachte, maar dit verdiend niet de schoonheidsprijs......
soms heb ik het gevoel dat ik de enige ben met een probleem, dus leg ik het hier maar even voor.
Het komt in mijn sw (heel) vaak voor dat er moet worden gezocht op een struct/klasse met een bepaalde waarde.
Bijvoorbeeld:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| typedef struct Node{ QString name; int id; char value; } QList <Node> nodeCollection; int searchForNode(QString name) { for(int i = 0; i < nodeCollection.size(); i++) { if(nodeCollection.at(i).name == name; return i; } return -1; } |
Nu wordt ik er een beetje moe van om voor elke struct/klasse elke keer voor alle member variabele die als 'key' dienen weer een search loopje te gaan schrijven. Dat moet slimmer kunnen.
Hoe lossen jullie dit op?
Zelf had ik het volgende in gedachte, maar dit verdiend niet de schoonheidsprijs......
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template<class ClType, class MType> int findIndexWhere(QList<ClType> container, MType value,MType *addrOfMember, ClType * addrOfClass) { if(addrOfMember > addrOfClass) return -1; int relAddr = addrOfMember - addrOfClass; for(int i = 0 ; i < container.size();i++) { void * classBaseAddr = &(container.at(i)); MType member = *((MType *) (classBaseAddr + relAddr)); if(member == value) return i; } } |