Ziemlich sicher, ich kenne die Antwort bereits, aber es ist einen Versuch wert.Kann ich eine Vorlagenspezialisierung aus einer Typliste deklarieren?
Also, sagen, ich habe eine Typliste:
template <typename ...Ts>
struct typelist{};
, dass einige Objekte enthält:
struct foo{};
struct bar{};
struct quux{};
using objects = typelist<foo, bar, quux>;
Jetzt habe ich eine Templat-Klasse (baz
), die eines dieser Objekte nehmen. Aber aufgrund der Codebasisgröße und der Kompilierungszeiten möchte ich die Implementierung meiner Vorlagenmethode in einer cpp-Datei haben.
So am unteren Rand des baz.cpp ich habe:
template <> class baz<foo>;
template <> class baz<bar>;
template <> class baz<quux>;
Das Problem ist, ich viele Klassen wie baz
haben, und die Liste der Objekte, die sie auch ständig wechselnden mit sich arbeiten. Also ... kann ich meine einzelne Typliste von Objekten trotzdem behalten und diese in der cpp-Datei von jedem baz
-ähnlichen Objekt zur Spezialisierung verwenden? Dann muss ich nur meine Typliste aktualisieren, wenn ich ein neues Objekt habe und alle Objektdateien neu erstellt werden.
Sie müssen * nicht spezialisieren *, nur explizit * instanziieren * sie. – Jarod42
Dies könnte definitiv mit einem Makro getan werden. Angesichts der Tatsache, dass dies vom Rest Ihrer Codebasis isoliert sein wird, warum tun Sie das nicht einfach? –