我在模板元編程的初學者試圖實現代相似,但略有不同的代碼多個版本:爲什麼我的程序不能工作,當我嘗試部分專門化功能模板?
#include <iostream>
enum Type
{
a1,
a2
};
enum Style
{
b1,
b2
};
template<Type,Style>
void doSomething();
{
std::cout<<" some rubbish\n";
};
完全專業化運作良好:
template<>
void doSomething<a1,b2>()
{
std::cout<<" this is my template parameters one :" <<a1<< " and two:"<<b2<<std::endl;
}
int main(int argc, char* argv[])
{
doSomething<a1,b1>();
doSomething<a1,b2>();
return 0;
}
:一些垃圾
:這是我的模板參數之一:0和2:1
但部分專業化像bel流失敗:
template<Style Some>
void doSomething<a1,Some>()
{
// here I want to use sub-template on some: e.g do_other<Some>
}
錯誤: 錯誤C2768:「DoSomething的」:非法使用顯式模板參數
(通用模板的身體在這種情況下評論,但它並沒有任何區別)
這種專業化在所有樣本中都是部分專業化的,但對我無效。這讓我很困惑。
非常感謝您的任何建議
事實是,你不能做功能模板的部分專業化。看到這個問題:[我可以使用部分模板專業化(非成員)功能?](http://stackoverflow.com/questions/1961659/can-i-use-partial-template-specialization-for-a非成員函數) –