C ++函数模板部分特化与c ++中的多个枚举参数?

时间:2013-07-12 09:15:35

标签: c++ templates c++11

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>()
{
 ...
}

怎么做? 模板部分特化功能? 请帮帮我

1 个答案:

答案 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();
}