我正在编写一个CustomVector类,使用标准向量在内部存储数据:
template <class T>
class CustomVector {
friend class CustomVector_ref<T>;
public:
...
private:
std::vector<T> _data;
};
Run Code Online (Sandbox Code Playgroud)
然后,为了从CustomVector中提取子向量,我使用一个存储指向每个数据元素的指针的类:
template <class T>
class CustomVector_ref {
public:
//Returns the value stored in CustomVector
//and pointed-to by _data_ref
T& operator[] (size_t id) { return *_data_ref[id] }
const T& operator[] const (size_t id) { return *_data_ref[id] }
...
private:
std::vector<T*> _data_ref;
};
Run Code Online (Sandbox Code Playgroud)
现在,为了说明我的问题,考虑简单的构造函数构建对CustomVector的所有元素的引用就足够了
template<class T>
CustomVector_ref<T>::CustomVector_ref(CustomVector<T>& cv)
{
for (T& el : cv._data)
_data_ref.push_back(&el);
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我有一个const CustomVector,我还需要定义构造函数:
template<class T>
CustomVector_ref<T>::CustomVector_ref(const CustomVector<T>& cv)
{
for (const …Run Code Online (Sandbox Code Playgroud)