所以我有一个模板化的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;
}
};
...问题是模板化转换操作符后面的模板特化无法在类级别定义(根据我得到的错误)。
我得到那个需要指定专业化的外线,但我不能为我的生活弄清楚语法。我该如何申报专业化?
答案 0 :(得分:4)
只需删除专业化。如果DestColor
与Color
相同,则永远不会调用您的转化函数。 [class.conv.fct] / P1:
转换函数永远不会用于转换(可能是 cv-qualified)对象(可能是cv-qualified)相同的对象类型 (或对它的引用),对(可能是cv认证的)基类 那种类型(或对它的引用),或(可能是cv-qualified)
void
。