3

オブジェクトへのポインターのメンバー ベクトルを持つクラスがあります。ここで、アクセサー メソッドがこのベクターへの const 参照を返すようにします。また、ベクトルのポインターが指すオブジェクトを呼び出し元メソッドが編集できないようにすることも必要です。つまり、ポインターは const オブジェクトを指す必要があります。ここに私の間違ったコードがあります:

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*>
    }
}

同様の質問への回答を見たことがあります。解決策は、コピーが正しいタイプのベクター myFoos のコピーを作成することです。myFoos ベクトルが非常に大きい可能性があるため、コピーを作成せずにこれを行う方法はありますか?

4

1 に答える 1

0

クラスに追加operator[] constするだけです:Foo

const Foo& operator[] (size_t i) const {
    // you may add some range checking here
    return *myFoos[i];
}
于 2013-08-21T08:50:19.150 に答える