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