是否有一种方法可以使这些密切相关的类型互操作

Is there a way to make these closely-related types interoperable?

本文关键字:密切相关 互操作 类型 可以使 方法 一种 是否      更新时间:2023-10-16

我有一个模板类,用于处理存储在其他地方的数据作为二维图像。

template <typename Pixel>
class ImageWin {
   ...
};

它具有对底层图像进行读写访问的迭代器和只读访问的const_iterator,并且如您所料,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>传递到它?我当然可以使它成为一个模板函数,但我尽量避免这样做。我想我可以让const ImageWin<Pixel>隐式地转换为ImageWin<const Pixel>,但我实际上想要相反的,因为const ImageWinImageWin的const像素更具限制性。一般来说,我不能将ImageWin<Pixel>转换为ImageWin<const Pixel>,因为如果ImageWin<Pixel>不是const,那么这会违反像素的const-ness。

有什么技巧我错过了吗?

谢谢。

为什么不直接重载它呢?

void needs_read_only( const ImageWin<Pixel>&  image ) /* const ??? */;
void needs_read_only( const ImageWin<const Pixel>&  image ) /* const ??? */;

请随意提出两个实现之间的逻辑。你可以向这些函数传递任何类型的引用。

作为旁注,如果它们是成员函数,请仔细检查this指针是否应该是const。