我目前正在开发一个C ++程序,它有两个类(这里有两个相关的类)。我正在寻找规范的方法(如果有的话)来解决以下问题。
有一个更大的类,它包含一个相当大的数据缓冲区(目前是std::vector
),还有一个更小的类,我也想访问这些数据。每个较小对象中的数据缓冲区是特定Bigger对象中数据的子集,因此我不想重复数据,但我希望能够轻松访问数据(并以相同的方式)来自两者。一个小代码来说明:
class Smaller {
private:
std::vector<char> data_;
public:
std::vector<char> &data() { return data_ };
};
class Bigger {
private:
std::vector<char> data_;
std::vector<Smaller> smallers_;
public:
std::vector<char> &data() { return data_ };
};
所以类似上面的东西就是我现在所拥有的,并且Smaller中的数据被独立于Bigger中的数据读取/复制。我开始使用Smaller编写一个解决方案,该解决方案具有指向其他数据的指针,但随后排除了范围数据。我一直在寻找使用迭代器来表示Bigger缓冲区中的范围,但是后来我没有通过Smaller访问“干净”的矢量。
如果Bigger.data()和Smaller.data()提供相同的接口,同时引用相同的数据缓冲区,那将是很好的。
这在C ++中有意义吗?在C中,我可以让Bigger(struct)有一个char [],并且在Bigger和Smaller中都有一个指针和长度用于访问。我可以做这样的事情,但通常“C”的做事方式不是C ++的最佳方式。
解决方案是否为这两个类提供了类似迭代器的接口?即在Bigger中的向量是完全私有的,只暴露数据迭代器?这是一个std::pair<std::iterator,std::iterator>
,还是这样的包装?