"templating" einen namespace
Ich würde gerne etwas bauen wie dieses:
File 1:
template<typename Vector>
namespace myNamespace {
class myClass1{ myClass1(Vector v) {...} }
}
File 2:
template<typename Vector>
namespace myNamespace {
class myClass2{ myClass2(Vector v) {...} }
}
Dies ist natürlich nicht möglich, weil Sie nicht-template-namespaces.
Stattdessen könnte ich ein struct statt eines namespace, aber dann kann ich nicht verbreiten und Funktionen mit namespace über mehrere Dateien.
Gibt es eine Lösung für so ein problem?
PS: ich weiß, ich könnte die Vorlage der Klassen, aber dann würde ich festlegen, welche vector Typ, den ich nutzen möchte, Wann immer ich eine neue Klasse erstellen.
- Über dein PS: Wie denken Sie, dass Sie einen Vorlagen-namespace entfernen müssen, geben Sie den Typ der vector beim instanziieren von Klassen? Sie würden noch brauchen, zumindest so etwas wie eine (fiktive)
using namespace myNamespace<some_vector_t>;
- Ich bin mit stakx auf dieser. Und was ist das
int
im code? - Ja, aber dann könnte man etwas wie das hier tun: int function1() { using namespace myNamespace<int>; myClass1 c1 = myClass1(5); myClass2 c2 = myClass2(2); } int function2() { using namespace myNamespace<char>; myClass1 c1 = myClass1('a'); myClass2 c2 = myClass2('b'); } Sorry, int ist falsch, ich werde es löschen. Wie kann ich fügen Sie hier den code korrekt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgenden auf Ihren Kommentar:
Statt zu schreiben
using namespace myNamespace<int>;
Verwenden Sie einfach vorgefertigte Klassen und schreiben Sie stattdessen (oder was auch immer Variante):
Ich Neige dazu zu denken, es ist besser, explizit über welche Arten verwendet werden, anstatt zu versuchen, etwas zu machen, das importieren einer bestimmten Instanziierung eines namespace.
Können Sie mehr vollständig zu beschreiben, das problem, das macht Sie denken, Vorlagen namespaces wäre sinnvoll?
Und denken Sie daran, Sie können immer schreiben
make_myClass1
free-Funktion abzuleiten, die Vorlage für Sie.Util
Klasse mit nur statischen Methoden? Würde nicht mit einem namespace werden, besser für die?Kannst du das nicht, aber Sie können verschiedene namespaces und Typdefinitionen (nicht, dass ich ihn unterstützen).
Sowieso, meine Klassen haben mehrere template-Parameter.
Jetzt habe ich diesen Ansatz:
und ich denke, ich werde es kombinieren mit Mark B ' s Ansatz!
Prost, Jungs!