У меня есть член класса std::vector<myClass*>
, который я хотел бы предоставить public const-access в интерфейсе класса. Для этого я хочу, чтобы иметь возможность написать:Как нарисовать std :: vector <myClass*> на std :: vector <const myClass * const>?
class myClass{
public:
myClass() { /*allocate dynamic stuff */};
virtual ~myClass() { /* delete dynamic stuff */};
//Accessors
const std::vector<const myClass * const> members() const{ //<- How do I implement?
//Compiles Fine - cit iterates over const int* objects
std::vector<myClass*>::iterator it = _members.begin();
//Does not compile
std::vector<myClass* const>::const_iterator citc= it;
//I need citc to iterate over cosnt int* const objects - How?
std::vector<const myClass * const> members_(citc, citc + _members.size()); //Compile Error
return members_;
};
/* ...moar stuff....*/
private:
/* ...moar stuff...*/
std::vector<myClass*> _members;
};
Этот код был очищено пример из контекста, так что я не был скомпилирован, но в самом коде, я вывел из пары экрана длин сообщения об ошибках, что единственная серьезная проблема заключалась в том, что мне нужен итератор citc для итерации поверх объектов const myClass * const, а не объектов const myClass *. Мысли? Спасибо, мил.
Прежде всего, чтобы уточнить: вы хотите создать копию всего вектора указателей, правильно? Не только листинг типа в том смысле, что он все еще относится к исходному объекту, но под другим типом, правильно? – jogojapan
Вместо предоставления доступа к самому вектору, дайте ему доступ к итераторам. Возможно, захотите вернуть const_iterator с помощью 'cbegin' и' cend'. –
@jogojapan Извините. Это то, что я пытаюсь сделать в коде, но прямой тип-cast будет работать. Любопытно, что бы то ни было относительно быстро и не позволяет публичному доступу изменять любой вектор _members, то, на что он указывает, или изменять элементы, на которые он указывает. Надеюсь, это поможет. – user27886