enum ABC
{
A, B, C
}
enum XYZ
{
X, Y, Z
}
template<XYZ xyz>
void DoSomething ();
template<ABC abc, XYZ xyz>
void DoSomething ();
template<> void DoSomething <X>()
{ ... }
template<> void DoSomething <Y>()
{ ... }
template<> void DoSomething <Z>()
{ ... }
By switch i have done this
template<ABC abc, XYZ xyz>
void DoSomething ()
{
switch (xyz)
{
case X: ... break;
case Y: ... break;
case Z: ... break;
default: break;
}
}
但我会做这样的事情 写入第2个参数的每个枚举值的3个不同函数 并删除开关
template<> void Pos::DoSomething <ABC abc, X>()
{
...
}
template<> void Pos::DoSomething <ABC abc, Y>()
{
...
}
template<> void Pos::DoSomething <ABC abc, Z>()
{
...
}
怎么做? 模板部分特化功能? 请帮帮我
答案 0 :(得分:4)
没有部分功能专业化。在这种情况下,您可以将结构与静态函数一起使用。
template<ABC, XYZ> struct do_helper;
template<ABC abc> struct do_helper<abc, X>
{
static void apply()
{
}
};
// same for Y, Z
template<ABC abc, XYZ xyz>
void Pos::DoSomething()
{
do_helper<abc, xyz>::apply();
}