2017-06-16 3 views
0

In Swift, ich versuche, eine generische Klasse zu erstellen, die eine andere Klasse erweitern und davon erben kann. Ich kann es in C++ wie folgt tun, aber gibt es eine Möglichkeit, dasselbe in Swift zu machen?Erweitern Sie einen Typ mit Generics

class Atom {}; 

template<typename Base, typename Extension> 
class Extend: Base { 
    Extension _value; 
}; 

int main() { 
    return 0; 
} 

Ein Ansatz, den ich versucht haben, anzuwenden ist Protocol Designorientierter, aber es scheint nicht der Lage zu sein, eine Klasse zu nehmen und sie zu erweitern. Das Beste, was ich erreicht habe, ist etwas wie das manuelle Erstellen der Erweiterung und das Deklarieren, dass es sich um Atom erweitert, aber an diesem Punkt würde ich einfach eine andere Klasse erstellen und die entsprechende Eigenschaft manuell hinzufügen.

Antwort

2

Eine Möglichkeit besteht darin, den Code für die Unterklasse zur Kompilier- oder Laufzeit zu generieren. Überprüfen Sie diese Antworten auf diese Fragen: How to generate code dynamically with annotations at build time in Java? und Generating, compiling and using Java code at run time?. Sie können der Basisklasse eine benutzerdefinierte generische Methode hinzufügen, die von jeder Unterklasse (im generierten Code) überschrieben wird, und sie kann Object zurückgeben. Es wäre ein Arbeitsansatz, wenn es sich lohnt.