Dies ist die Fortsetzung this Frage.Vorlagenhandler Methoden Dispatcher
ich verschiedene Template-Methoden haben, die jeweils für eine andere Art von Nachricht, Nicht-Typ Template-Parameter und Template-Spezialisierung mit:
namespace Handlers {
enum MSG_TYPES {
MSG1,
MSG2
};
template<MSG_TYPES>
void handle_message() {
// Default handler : not defined type
}
template<>
void handle_message<MSG1>() {
cout << "Handle 1";
}
template<>
void handle_message<MSG2>() {
cout << "Handle 2";
}
Nun, würde Ich mag eine andere Methode haben, um zu versenden der richtige Handler. So etwas wie
template<typename T>
void handle(T t) {
try {
handle_message<T>();
} catch(...) {
}
}
die wie
aufgerufen werden konnteint i = 0;
Handlers::handle(static_cast<Handlers::MSG_TYPES>(i));
So, wie diese Dispatcher erreicht werden könnte?
PS: Der vorherige Code nicht auf handle_message<T>();
wegen
Anmerkung: Vorlage Argument Abzug/Substitution fehlgeschlagen:
sollte nicht aufgerufen werden, die Standard-Handler?
Welche Funktion aufgerufen wird, ist eine * Kompilierzeit * Entscheidung, aber es sieht so aus, als ob Ihr 'i' Wert bis * Laufzeit * nicht bekannt sein könnte. – aschepler
@aschepler Ja, ich mische Laufzeit und kompiliere Zeit. Also, ich bin mit einer Switch-ähnlichen Struktur übrig, um zu entscheiden, welche Methode ich anrufen soll, sobald ich die Message ID (i) kenne? – perencia
Sie übergeben einen Typ an eine Vorlage, die einen Aufzählungswert erwartet. Es ist nicht verwunderlich, dass es darum gekämpft hat, das Argument abzuleiten. –