2013-07-12 81 views
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第二參數 的每個枚舉值的不同的功能和去除開關C++函數模板部分特化與C++中的多個枚舉參數?

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

如何做到這一點??? 模板部分專精的功能? 請幫我

+6

您的空間欄似乎卡住了。 –

+1

沒有專門的模板功能:http://www.gotw.ca/publications/mill17.htm – doctorlove

回答

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