Передача непостоянного аргумента в постоянный параметр - PullRequest
1 голос
/ 23 марта 2012

При условии, что у меня есть такая функция

my_method(const vector<const T*> & param); 

Интересно, смогу ли я вызвать функцию таким образом

vector<T*> my_vector;
my_method(my_vector);

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

Вы не можете делать то, что пытаетесь сделать.std::vector<T*> отличается от типа std::vector<const T*>, поэтому аргумент функции не соответствует параметру функции.То, что вы пытаетесь сделать, это не «передача непостоянного аргумента константному параметру», если он передает аргумент одного типа функции, ожидающей аргумент другого типа.«Передача непостоянного аргумента в постоянный параметр» будет выглядеть примерно так:

my_method(const vector<T*> & param);

vector<T*> v; // non const vector

my_method(v); // OK, method takes v by const reference, so it cannot be modify v.

, и вы можете это сделать.

Обратите внимание, что в приведенном выше примере my_method не может изменить vector v, но, поскольку v содержит неконстантные указатели, объекты, на которые указывает , могут быть изменены .

1 голос
/ 23 марта 2012

Создать копию вектора, но с указателями const:

vector<T*> pointers;

vector<const T*> const_pointers(pointers.begin(), pointers.end());

my_method(const_pointers);
0 голосов
/ 23 марта 2012

Попробуйте и посмотрите: http://codepad.org/dHQzwMyH

Краткий ответ - нет.A

vector<const T*> my_vector;

будет работать, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...