我有一个模板类,用于将存储在其他地方的数据视为二维图像。
template <typename Pixel>
class ImageWin {
...
};
它具有用于对底层图像进行读/写访问的迭代器和用于只读访问的 const_iterators,并且如您所料,const 方法返回 const 迭代器,非 const 方法返回非 const 迭代器。如果Pixel
类型是 const,那么所有的迭代器都是 const 迭代器。
这使得ImageWin<const int>
和const ImageWin<int>
非常相似的类型。它们都具有相同的迭代器集(const 迭代器)。任何人都不能修改底层像素。唯一的区别是ImageWin<const int>
可以指向其他地方(即,窗口指向的位置是可变的,但像素不是)。
如果我有一个需要读取像素数据的函数,我希望能够声明如下内容:
void needs_read_only( const ImageWin<int>& image );
问题是,有什么办法可以ImageWin<const int>
进去吗?我当然可以使它成为一个模板函数,但如果可能的话,我会尽量避免这种情况。我在想我可以让 constImageWin<Pixel>
隐式转换为ImageWin<const Pixel>
,但我实际上想要相反的,因为 aconst ImageWin
比ImageWin
const 像素的 a 更具限制性。一般来说,我无法ImageWin<Pixel>
转换为,ImageWin<const Pixel>
因为如果不是 const,那将违反像素的 const-ness ImageWin<Pixel>
。
有什么我缺少的技巧吗?
谢谢。