2016-02-29 1 views
0

У меня есть класс, наследующий stl-вектор, и мне нужны две функции, возвращающие актеры в вектор, один изменяемый и другой неизменяемый.Static cast class этот указатель на постоянный указатель

class My : public vector<int> { 
    public: 

    vector<int>& array() {return *static_cast<vector<int>*>(this);} 
    const vector<int>& array() const {return *static_cast<vector<int>*>(this);} 
} 

Почему он не компилировать на второй const перегрузки?

+0

Потому что вы не возвращаете 'константного вектора &' от второго. – callyalater

+0

'static_cast' пытается удалить константу указателя' this' и возвращает что-то типа 'vector &'. См. [Здесь] (http://en.cppreference.com/w/cpp/language/static_cast) для получения дополнительной информации. – callyalater

+0

FYI, 'const_cast' - это то, что вы хотели, а не' static_cast'. –

ответ

4

При попытке удалить const -ness, который не работает.

Однако, вы должны просто быть в состоянии написать

vector<int>& array() {return *this;} 
const vector<int>& array() const {return *this;} 
Смежные вопросы