Salut,
Désolé pour le titre, c'est pas forcément super clair. Je vais donc tâcher d'être le plus précis possible dans la description du problème.
J'ai de diverses structures telles que celle-ci :
Et mon objectif est de créer une classe template pour créer une QList<T *> (on considèrera que c'est une std::list<T *>, le problème étant un problème de C++ et non de l'utilisation de Qt) de ces structures, avec T = la strucutre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 struct CardEntry { uint ID; // 0 uint CardID; // 1 uint GroupID; // 2 uint ExtensionID; // 3 QString Name; // 4 QString Description; // 5 QString Reference; // 6 QString Code; // 7 uint TypeID; // 8 };
Ainsi, j'ai créé une classe template nommée DBStore avec une fonction Load dont le but est de générer cette liste.
Le problème est de pouvoir remplir les structures template de la liste, dont le compilateur n'a aucune info.
L'erreur de compilation vient logiquement du fait que data soit un type indéfini, donc logiquement, on ne peut pas faire data[i] = quelque chose. Bref, je ne vois pas du tout comment faire pour assigner une valeur à chaque champ de mes structures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 template<typename T> class DBStore { public: DBStore() : _fieldNum(0) {} void Load(QSqlDatabase *db, /*...*/, const QString structInfo) { // ... // Création d'un T* à remplir puis à mettre dans la liste T *data = new T; // Avec _fieldNum, le nombre de champs de la structure for (uint i = 0; i < _fieldNum; i++) { if (structInfo.at(i) == "i") // i pour uint, on connait donc le type présumé du champ data[i] = /*valeur en uint*/; // Erreur else if (structInfo.at(i) == "s") // s pour string, on connait donc le type présumé du champ data[i] = /*valeur sous forme de string*/; // Erreur } // ...
Pour résumer, ma question est la suivante :
Merci d'avance et désolé pour la clarté, c'est pas évident à exprimer,Comment faire pour faire data[i] = quelque chose, avec data, un pointeur d'une classe template, en sachant uniquement le type de la valeur que l'on doit y mettre ?
Amnell.
Partager