C++ C++;,将常量引用返回到包含指向常量对象指针的向量的成员函数

C++ C++;,将常量引用返回到包含指向常量对象指针的向量的成员函数,c++,pointers,vector,return,constants,C++,Pointers,Vector,Return,Constants,我有一个类,它的成员向量是指向对象的指针。现在我需要一个访问器方法来返回这个向量的常量引用。我还希望调用方方法无法编辑向量指针指向的对象,即指针应该指向常量对象。这是我的错误代码: class Foo { private: vector<Foo*> myFoos; public: const vector<const Foo*> &getMyFoos(void) { return myFoos; //Doesn't work

我有一个类,它的成员向量是指向对象的指针。现在我需要一个访问器方法来返回这个向量的常量引用。我还希望调用方方法无法编辑向量指针指向的对象,即指针应该指向常量对象。这是我的错误代码:

class Foo
{
private:
    vector<Foo*> myFoos;
public:
    const vector<const Foo*> &getMyFoos(void)
    {
        return myFoos; //Doesn't work since vector<Foo*> cannot be cast to vector<const Foo*>
    }
}
class-Foo
{
私人:
向量myFoos;
公众:
常量向量和getMyFoos(无效)
{
return myFoos;//不起作用,因为无法将vector强制转换为vector
}
}

我已经看到了类似问题的答案,其中解决方案是复制向量myFoos,其中的副本类型正确。由于myFoos向量可能非常大,因此是否可以在不复制的情况下执行此操作?

只需将
运算符[]const
添加到
Foo
类中:

const Foo& operator[] (size_t i) const {
    // you may add some range checking here
    return *myFoos[i];
}

如果结果只在短时间内使用,则可以返回
static\u cast(myFoos.data())
,然后再变异向量…返回一对常量迭代器以开始和结束。在C++11中,教
for
如何对其进行迭代。@H2CO3:然后将
const Foo
添加到
vector
的cast中,然后通过原始
vector
访问它并尝试更改它。。。BOOM.或者使用类型来包装指针,其中
操作符*
操作符->
有足够的
常量
版本。添加一个方法来访问对象,而不是向量:
Foo const*getFoo(size_t i)const{return myFoos[i];}
--也是一个获取大小的方法。如果指针不能为null,则返回一个引用。