Ich habe einen interessanten Fall, in dem versucht wird, innerhalb einer Template-Funktion zu verzweigen, wobei der Pfad von der vom Template-Typ implementierten Schnittstelle abhängt. Dieser Zweig bestimmt dann den Konstruktor des Rückgabewerts. Ich bin mir nicht sicher, ob diese Art der Verzweigung möglich ist. Die Alternative besteht darin, die Funktion in zwei verschiedene Funktionen aufzuteilen und den Benutzer denjenigen aufrufen zu lassen, der dem gewünschten Zweig entspricht.C++ - Template-Verzweigung
Meine Frage ist zweifach:
Wie kann ich die if-Anweisung auf der Grundlage der Schnittstellen-Implementierung durchführen?
Wie kann ich die Funktion kompilieren, wenn die Schnittstelle nicht implementiert ist? Zum Beispiel hat int
keinen Konstruktor mit zwei Parametern.
template<typename T>
T GetObject()
{
// If T implements interface, call interface constructor
if(typeid(T) implements inteface IInterface) // How can this be done?
return T(1, 2);
// If T does not implement the interface, call parameterless constructor
else
return T();
}
Was versuchst du zu erreichen? Ihr Vorlagenbeispiel ist unmöglich, aber es kann einen einfachen Weg geben, Ihr tatsächliches Ziel zu erreichen. – patros
Dies ist Teil eines Frameworks innerhalb meiner Software für die Serialisierung. Dies ist der Punkt, an dem entweder das Rückgabeobjekt basierend auf einigen gespeicherten Bytes zugewiesen wird oder das zurückgegebene Objekt über untergeordnete Objekte verfügt, die abgerufen werden müssen. Die Schnittstelle in meiner Frage ist die ISerializable-Schnittstelle, die ich erstellt habe. Barry hat mir genau das gebracht, was ich brauchte. Ich habe diese Frage gestellt, um zu versuchen, meine 'T GetObject()' und 'ISerializable GetSerializedObject()' Funktionen zu kombinieren. –