2010-10-08 31 views
2

Je veux la structure suivante en tant que membre de la classe, mais je ne connais pas le type de T, donc j'ai besoin de "déclarer" la structure à l'exécution.Déclare membre de la classe à l'exécution en D


struct Chunk (T) { 
    string id; 
    T[][] data; 
} 

class FileBla { 
    this() { 
     Chunk !int ck; // need to be turned in a class member 
    } 
} 

Doit être manquant quelque chose de facile.

Répondre

8

Vous pouvez modèle la classe ainsi:

import std.stdio; 

struct Chunk (T) { 
    string id; 
    T[][] data; 
} 

class FileBla(T) { 
private: 
    Chunk!T ck; 
} 

void main() { 
    auto f = new FileBla!int; 
    writeln(typeid(f.ck)); 
} 
2

Je suppose que vous êtes habitué à la programmation dans les langages dynamiques et essayez maintenant d'apprendre une langue statique.

Il existe au moins trois façons raisonnables de le faire:

Modèle FileBla, aussi:

class FileBla(T) { 
    Chunk!T ck; 

    // Other stuff. 
} 

Wrap Chunk dans une classe polymorphes.

Allouer le morceau sur le tas et y enregistrer un pointeur void*. C'est l'ancienne façon de faire les choses en C, cela nécessitera de lancer manuellement le pointeur vers le bon type, et n'est pas sûr pour la mémoire. Néanmoins, il est parfois utile.