我正在解析一个文件,并创建一个Foo对象向量的向量。
vector< vector<Foo*> > mFooVectors;我必须允许使用以下getFoos函数进行访问。
const vector<const Foo*>& getFoos(int index); 所以我创建了一个向量的const声明:
const vector< const vector<const Foo*> > mConstFooVectors;现在我该怎么做mConstFooVectors = mFooVectors,这样我才能返回一个对mConstFooVectors的引用?
发布于 2011-07-19 01:43:22
在任何给定级别添加const都不可能那么简单。模板的不同实例化是不同的无关类型,vector<T>与vector<const T>无关,并且无法从一个转换为另一个。
另一方面,你可以创建一个不同的向量,然后只复制内容,但这可能会很昂贵,因为你必须复制所有不同的包含的向量。
顺便说一句,如果您返回外部向量的常量引用,常量引用将表现为:const std::vector< const std::vector< Foo * const > >&,请注意,由于与C++中的类型相关联的值语义,常量在中传播。问题是存储在内部向量中的值是一个指针,使该指针为常量并不会使指向的对象为常量。类似地,您的getFoos(int)的行为将等同于const std::vector< Foo * const >&。注意,这是行为,而不是实际的类型。
发布于 2011-07-19 01:46:30
我不知道你想做什么,但我会看看boost::ptr_vector
特别是,如果你没有正确处理,你的向量成员可能会泄漏...(RAII)
发布于 2011-07-19 01:46:41
您正在混合一个
vector<const Foo *>使用
vector<Foo *>你必须决定你想要哪一个-没有办法从一个转换到另一个(不复制)。
https://stackoverflow.com/questions/6736938
复制相似问题