Передать неконстантный вектор <string> в функцию, которая получает ссылку на константный вектор <const string>?

0

У меня есть функция, которую я хочу принять const vector<const string> но я также хочу, чтобы пользователь мог передать vector<string>. Я думал, что могу просто сделать аргумент функции ссылкой на const и что неконстантный вектор все равно будет принят, но это не так. Вот пример:

void test(const vector<const string> &v)
{
    return;
}

int main( int argc, char *argv[] )
{
    vector<string> v;
    test(v);

    return 0;
}

Ошибка, которую я получаю:

error C2664: 'test' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty> &'


Почему этот пример не работает и как вы предлагаете мне заставить мою функцию работать, чтобы пользователь мог передать const vector<const string> и vector<string>? благодаря

  • 6
    Они не одного типа, и не существует вероятного неявного преобразования. Без сильного варианта использования вектора const string я ставлю под сомнение сам дизайн. Доступ к элементам и их модификация уже ограничены в связи с const& природой самого вектора, так что именно вы надеетесь получить , сделав в первую очередь const string типа const string .
  • 0
    @WhozCraig Я подумал, что если я сделаю свою ссылку наиболее ограниченным вариантом использования с const, то случаи без каких-либо ограничений const могут быть просто преобразованы в это.
Показать ещё 4 комментария
Теги:
const

1 ответ

0

Возможно, это сообщение может вам помочь. Однако вы можете заставить свой вызов этим (ужасным) способом

test(*reinterpret_cast<vector<const string>*>(&v));

что в некотором роде также иллюстрирует, почему автоматическое преобразование невозможно. Вы можете нарушить правила контейнера:

vector<string> v = {"a", "b"};
vector<const string>& vc = v; //not allowed, of course
v[0].clear(); //<-- but also vc[0] is cleared

Ещё вопросы

Сообщество Overcoder
Наверх
Меню