In einer Konstruktorvorlage, die ich schreibe, möchte ich eine statische Assert auf einer Schnittstelle einer Klassenvorlage haben. Ein grundlegendes (nicht Compilierung) Beispiel für die Situation wie folgt dar:Statische Bestätigung der Schnittstelle zur Klassenvorlage
class Baz
{
}
template<typename T>
class Bar: public Baz
{
}
template<typename T>
class Qux: public Baz
{
}
class Foo
{
template<typename T>
Foo(T typePar , Baz& baz)
{
// here I would like to assert that Baz is an interface to a class
specialized on T
}
}
Meine beste Vermutung des Hinzufügen einer Funktion zu Baz ist, aber da dies nicht als Templat werden kann, würde ich jetzt nicht, wie ich das nennen könnte bei Kompilierzeit
Sie meinen, Sie möchten zur Kompilierzeit überprüfen, dass 'Baz' tatsächlich eine Referenz auf eine' Bar 'oder' Qux '' ist? Das kann nicht gemacht werden, weil der dynamische Typ von 'baz' zur Laufzeit andere Dinge sein kann. –
TartanLlama
Sie könnten 'Baz &' in einen Template-Parameter ändern und dann die Prüfung durchführen, aber dann könnten Sie keinen 'Baz' an Ihren Konstruktor übergeben, Sie müssten ihn zuerst umwandeln. – TartanLlama
Ich sehe was du meinst. Das Ändern in einen Template-Parameter ist für mich keine wirkliche Option. Also werde ich nur auf diese statische Behauptung verzichten. – laurisvr