Ich habe eine Datenbank, die 4 Arten von Indizes hat. Jeder Indextyp hat eine Sortierreihenfolge. Das heißt, wenn Sie den statischen Indextyp kennen, dann gibt es einen richtigen Funktor, der zum Sortieren der Objekte in diesem Index verwendet wird, und er ist auch bekannt, sobald Sie den Indextyp kennen, d. H. Statisch zum Zeitpunkt der Kompilierung.C++ Transport laufzeitbedingten Typ Informationen
Die Datenbank verfügt über eine Funktion, die eine Laufzeitwechselanweisung enthält, um zu entscheiden, mit welchem Index zu sprechen ist. Ich möchte, dass diese Funktion Laufzeitinformationen aus dem Index zurückgibt (meistens Iteratoren), aber auch den zu verwendenden statischen Auftragstyp.
Um die Absicht zu zeigen, hier ist ein Pseudo-Code. Es funktioniert nicht wie es ist ... könnte Template-Spezialisierung verwendet werden, um getLookupInfo zu schreiben (der Rückgabetyp würde polymorph). Hinweis: Ich möchte keine virtuellen Dateien verwenden.
template <typename Iterator, typename Order>
struct LookupInfo {
typedef Order order;
uint64_t cost;
Iterator it1, it2, it3, it4;
};
LookupInfo Database::getLookupInfo(LookupData data)
{
if (data == ....) {
return LookupInfo<Iterator1, Order1>();
}
return LookupInfo<Iterator2, Order2>();
}
some_function(LookupInfo lookup_info) {
vector<Record> records(lookup_info.begin(), lookup_info.end());
sort(records.begin(), records.end(), lookup_info::order());
}
Ist so etwas überhaupt möglich?
Ich bin gespannt, wie Sie erwarten, dass 'getLookupInfo' funktioniert. Ich sehe nicht, wie es heißen könnte. Die Rückgabeanweisungen stimmen nicht mit dem Rückgabetyp überein, was bedeutet, dass Sie entweder Polymorphismus oder Template-Spezialisierung benötigen. – AndyG
Andy - ja - da schaffe ich es nicht, die Schleife zu schließen. Das Code-Snippet funktioniert nicht, es soll mehr zeigen, was ich tun möchte. Und Sie haben Recht, der Trick ist irgendwie, dass der Rückgabetyp von getLookupInfo mir jedes Mal einen anderen Typ zurückgibt. Ich möchte jedoch keine virtuellen Dateien, daher würde ich gerne die Template-Spezialisierung verwenden. Aber selbst das IMHO ist knifflig. Die Essenz meiner Frage ist wahrscheinlich: Wie verwende ich Template-Spezialisierung, um getLookupInfo zu schreiben? – Frank
Der Trick besteht darin, alles in einen Typ zu verwandeln ... Ich könnte Ihnen vielleicht helfen, wenn Sie mir einen Pseudo-Code geben, wie Sie ihn nennen möchten (ohne Template-Spezialisierung). – AndyG