0

所以我有一個模板化的圖像類,爲此我嘗試設置內聯顏色轉換。這是代碼的簡化是傷腦筋我:模板類的內部模板

template <typename Color = colors::RGB> 
class Image { 

    /// ... 

    template <typename DestColor> 
    operator Image<DestColor>() { 
     /// when assigning with a different colorspace: 
     /// ... do the color conversion 
     /// ... and return a fresh Image<DestColor> 
    } 

    template <> 
    operator Image<Color>() { 
     /// when assigning with the same colorspace: 
     return *this; 
    } 

}; 

...問題是,下面的模板轉換操作符的模板特不能在類的級別定義(根據我得到的錯誤)。

我得到那個人需要指定專業化線外,但我不能爲我的生活找出語法。我應該如何申報專業化?

+1

如果我沒有弄錯,你不能在一個類中聲明一個完整的模板類專業化,將虛擬類模板參數default添加到void可能會解決問題,如果它不打擾你。 – Caninonos

+0

啊哈,如果我可能會問,會是什麼樣子? – fish2000

+2

它看起來像[that](http://ideone.com/Udekt9)(編輯:你也可以把它設置爲私有的,並且聲明一個公共別名/模板派生結構來隱藏那個虛擬參數,如果它困擾你,沒有更好的方法) – Caninonos

回答

4

只要刪除專業化。如果DestColorColor相同,您的轉換函數將永遠不會被調用。 [class.conv.fct]/P1:

A轉換函數從不用於轉換(可能 CV-合格)對象(可能CV修飾)相同的對象類型 (或參考它可能是cv-合格的)基類 這種類型(或對它的引用)或(可能是cv-合格的) void

+0

哦,男人 - 我覺得有點愚蠢,現在你已經指出了;但是,謝謝!這當然簡化了事情。 – fish2000