C++缓存设计建议

leo*_*leo 5 c++ class-design

我有一个c ++应用程序,有几种图像类型(RGB,灰色......),每种类型都有像旋转或缩放等属性.每种图像类型都是通过其他类型的计算生成的.例如,通过旋转GrayImage产生A旋转,而旋转a GrayImage又通过"灰化"产生RGBImage.

我想设计一个缓存类,其中GetX(...)包含缓存各种图像的方法(可能还有计算路径中的所有图像).如果不在缓存中,该类还将知道如何生成每个图像.

该类必须满足一些约束:

  1. 由于我们处理的是不同类型和表示的图像(RGB,GrayScale等),因此缓存必须为调用代码返回一个具体类,以便能够在不使用某种类型的情况下使用它.因此,缓存机制必须包含包含具体类型的不同缓存结构.(如果我错了,请修理我)

    map<...,RGBImage> 
    map<...,GrayImage> 
    
    Run Code Online (Sandbox Code Playgroud)

    例如.

  2. 缓存必须灵活地适应图像计算的变化.代码更改是可以接受的,只要它们不是太大.

我当前的版本Key为每种图像类型附加了一个结构.有GrayKey,RGBKey等等.各种键保持像Scale和Rotation这样的属性,并且可以具有特定于图像的属性(例如toGrayConvertingMethod for GrayKey).缓存保存表单的地图:

    map <XKey,XImage>
Run Code Online (Sandbox Code Playgroud)

GetX(...)例如,方法接收Key结构作为请求Rotated GrayImage的参数.但是,此实现强制缓存应用大量逻辑来计算图像.它必须检查GrayKey是否请求旋转的图像并采取相应的行动.我想以更优雅的方式"编码"这个图像计算关系,但似乎找不到.

有什么建议?

非常感谢.

Jay*_*Jay 0

您考虑过使用STL 容器吗?使用地图或集来存储对图像的引用。可以快速查找您是否已经创建了图像。