2009-09-15 10 views
3

J'ai un framework de persistance, et j'essaie d'utiliser des génériques pour ne pas avoir à créer de nouvelles classes de listes pour chaque type d'objet que je veux stocker de manière sûre. .Référence de classe de la classe de paramètre générique

J'ai une méthode qui retourne la classe de l'objet contenu dans la classe de liste (donc je sais que l'exécution des requêtes et ayant pour objet de créer

À titre d'exemple, il ressemble à ceci:

type 

    TMyObject = class 

    end; 
    TMyObjectClass = class of TMyObject; 


    TMyObjectList = class 
    public 
    function ListClass: TMyObjectClass; virtual; abstract; 

    end; 

    TMyObjectList<T: TMyObject, constructor> = class(TMyObjectList) 
    public 
    function ListClass: TMyObjectClass; override; 

    end; 

implementation 

{ TMyObjectList<T> } 

function TMyObjectList<T>.ListClass: TMyObjectClass; 
begin 
    result := T; // <==== this wont compile 
end; 

end. 

est-il un moyen de retourner la classe du paramètre générique dans ce cas?

Merci

N @ (en utilisant Delphi 2009)

Répondre

6

Ceci est a known issue in Delphi 2009. Il a été fixé en 2010. Je viens de tester et votre code compile très bien là-bas.

+0

Vous. Sont. Une légende. Merci! Je ne peux pas attendre pour obtenir 2010 (devrait être demain, yay!). – Nat

+0

Cool! Le RTTI amélioré rendra la persistance beaucoup plus facile, BTW. :) –

0

T n'est pas une instance d'un objet.

Dans votre exemple précis, vous devriez écrire quelque chose comme: résultat

: = auto;

Je pense que vous êtes à la recherche de la mauvaise façon ...

+0

Je voudrais retourner une référence à la * classe * pas une référence à un objet instancié. – Nat

+0

Non, 'T' n'est pas une instance d'un objet. 'T' est une classe. Vous êtes confus car la ** contrainte ** "' T: TMyObject' "ressemble à une déclaration de variable où' T' serait une référence 'TMyObject'. Les génériques signifient que les classes maintenant comment * saisir les paramètres * de la même manière que les fonctions ont des * paramètres de valeur *. –

Questions connexes