C++ 模板处理程序方法
假设我想对不同类型的消息使用不同的处理程序,每条消息都由C++ 模板处理程序方法,c++,templates,C++,Templates,假设我想对不同类型的消息使用不同的处理程序,每条消息都由int标识。我想将每个处理程序定义为模板方法的实例化 这个想法是这样的: h enum Handler { MESSAGE1, MESSAGE2 }; template<MESSAGE1> void handle() { } enum处理程序{ 信息1, 信息2 }; 样板 无效句柄(){ } main.cpp int main() { handle<Handler::MESSAGE>(
int
标识。我想将每个处理程序定义为模板方法的实例化
这个想法是这样的:
h
enum Handler {
MESSAGE1,
MESSAGE2
};
template<MESSAGE1>
void handle() {
}
enum处理程序{
信息1,
信息2
};
样板
无效句柄(){
}
main.cpp
int main()
{
handle<Handler::MESSAGE>();
}
intmain()
{
句柄();
}
当然,此代码不会编译,因为MESSAGE1
不是类型。
那么,如何为每条消息创建不同的类型呢?此外,我希望尽可能保持这些类型的使用(因此使用枚举)。您希望使用模板专用化的非类型模板参数:
模板无效句柄();//违约
模板无效句柄(){
// ...
}
模板无效句柄(){
// ...
}
您需要具有模板专门化的所谓非类型模板参数:
模板无效句柄();//违约
模板无效句柄(){
// ...
}
模板无效句柄(){
// ...
}
您可以使用std::integral_constant
(或者编写自己的空类型包装器来完成相同的工作)将枚举包装为类型:
template <Handler H>
using handle_t = std::integral_constant<Handler, H>;
模板
使用handle_t=std::integral_常量;
然后在不同类型上重载:
void handle(handle_t<MESSAGE1> ) { ... }
void handle(handle_t<MESSAGE2> ) { ... }
void句柄(句柄){…}
无效句柄(句柄{…}
您可以通过以下方式拨打:
handle(handle_t<MESSAGE1>{} );
handle(handle\u t{});
您可以使用std::integral_constant
(或者编写自己的空类型包装器来完成相同的工作)将枚举包装为类型:
template <Handler H>
using handle_t = std::integral_constant<Handler, H>;
模板
使用handle_t=std::integral_常量;
然后在不同类型上重载:
void handle(handle_t<MESSAGE1> ) { ... }
void handle(handle_t<MESSAGE2> ) { ... }
void句柄(句柄){…}
无效句柄(句柄{…}
您可以通过以下方式拨打:
handle(handle_t<MESSAGE1>{} );
handle(handle\u t{});