0
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;
   }
}

但我想做这样的事情,为第二个参数的每个枚举值编写 3 个不同的函数并移除开关

template<> void Pos::DoSomething  <ABC abc, X>()
{
 ...
}
template<> void Pos::DoSomething  <ABC abc, Y>()
{
 ...
}
template<> void Pos::DoSomething  <ABC abc, Z>()
{
 ...
}

这个怎么做 ???模板部分专业化功能?请帮我

4

1 回答 1

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();
}
于 2013-07-12T09:19:14.487 回答