2

我在模板元編程的初學者試圖實現代相似,但略有不同的代碼多個版本:爲什麼我的程序不能工作,當我嘗試部分專門化功能模板?

#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的」:非法使用顯式模板參數

(通用模板的身體在這種情況下評論,但它並沒有任何區別)

這種專業化在所有樣本中都是部分專業化的,但對我無效。這讓我很困惑。

非常感謝您的任何建議

+0

事實是,你不能做功能模板的部分專業化。看到這個問題:[我可以使用部分模板專業化(非成員)功能?](http://stackoverflow.com/questions/1961659/can-i-use-partial-template-specialization-for-a非成員函數) –

回答

2

在C++中,你不能做partial specialization for functions。考慮將你的功能轉移到一個類。

+0

實際上這些確實是這個類的方法。類不是模板化的。將看看 – user1077392

+1

如果你忽略了這樣的重要信息,你只能得到部分答案 –

+0

是的,見詳細解釋的參考。非常感謝你。 – user1077392

0

C++優先級爲您的類型使用特化的函數,其餘部分由普通模板函數處理。

相關問題