专门化模板类的内部模板

时间:2015-08-20 22:10:25

标签: c++ templates inline template-specialization partial-specialization

所以我有一个模板化的Image类,我试图设置内联颜色转换。这是令我烦恼的代码的简化:

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 个答案:

答案 0 :(得分:4)

只需删除专业化。如果DestColorColor相同,则永远不会调用您的转化函数。 [class.conv.fct] / P1:

  

转换函数永远不会用于转换(可能是   cv-qualified)对象(可能是cv-qualified)相同的对象类型   (或对它的引用),对(可能是cv认证的)基类   那种类型(或对它的引用),或(可能是cv-qualified)   void