這是this問題的延續。模板處理程序方法調度程序
我有不同的模板方法,分別用於不同類型的消息,使用非類型模板參數和模板專業化:
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";
}
現在,我想有一些其他的方法來派遣正確的處理程序。喜歡的東西
template<typename T>
void handle(T t) {
try {
handle_message<T>();
} catch(...) {
}
}
可能被調用像
int i = 0;
Handlers::handle(static_cast<Handlers::MSG_TYPES>(i));
所以,這個調度員怎麼可能實現呢?
PS:前面的代碼失敗的handle_message<T>();
因爲
注:模板參數推導/置換失敗:
應該不是默認的處理程序中調用?
要調用的函數是一個*編譯時*的決定,但它看起來像你的'我'值可能不知道,直到*運行時*。 – aschepler
@aschepler是的,我混合運行時和編譯時間。所以,我留下了一個類似開關的結構來決定一旦我知道消息ID(i)時要調用哪個方法? – perencia
您正在將類型傳遞給期望枚舉值的模板;這並不奇怪,它試圖推斷出這個論點。 –