数组类设计:如何在稀疏/密集存储,数组和子数组之间共享接口?

时间:2014-02-14 11:08:24

标签: c++ templates inheritance

我的目标是创建一个具有密集或稀疏存储的2D数组类,并支持子矩阵。
我希望能够有密集存储(std :: vector)或稀疏(std :: map)
我还希望能够使用几乎使用相同的get / set接口的子矩阵

下面的模拟课程:

struct ArrayBox
{
    int w,h,x,y;
    bool in_range(...)
};

template<class T>
struct DenseArray2D
{
    ArrayBox box;
    std::vector<T> data;

    T& get(x,y)
    // etc
}

template<class T>
struct SparseArray2D
{
    ArrayBox box;
    std::map<size_t, T> data;

    T& get(x,y)
    // etc, interface identical to above
}

现在,我如何添加对子数组的支持,以便尽可能少地编写相同的代码?子阵列的唯一区别是它具有对数据的引用(在ctor中给出)和不同的框

上述设计当然不是一成不变的,所以欢迎任何建议。

0 个答案:

没有答案