我正在解析一个文件并创建一个向量的Foo对象向量。C++ - 返回常量对象的常量向量const的向量
vector< vector<Foo*> > mFooVectors;
我必须允许访问以下getFoos函数。
const vector<const Foo*>& getFoos(int index);
所以我创造了我的向量的常量声明:
const vector< const vector<const Foo*> > mConstFooVectors;
现在我该怎么办mConstFooVectors = mFooVectors这样我就可以回到mConstFooVectors参考?
如果可以,更改'getFoos'的接口。问题是'const vector'不能像'T const * const *'可以提供'T **'原始指向的不可变视图一样的方式提供'vector '的不可变视图。 '。该标准保证'T *'和'const T *'具有相同的对象表示,因此允许指针转换,但'vector'不能“知道”并且不允许相应的转换。 –
所以,如果你想要提供一个'mFooVectors'的视图来禁止修改(对向量或者这些指针末尾的任何东西),你真的需要返回迭代器。例如,你可以编写你自己的迭代器类来包装向量迭代器,或者你可以写一个Visitor-pattern-style函数来代表调用者进行迭代。 –
@保罗 - 只是猜测downvoter,看到'矢量',发现问题的其余部分不感兴趣。它只是不起作用。 –