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 :

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
};
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.

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.

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
            }
 
// ...
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.

Pour résumer, ma question est la suivante :

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 ?
Merci d'avance et désolé pour la clarté, c'est pas évident à exprimer,
Amnell.