Как принять как std :: vector, так и std :: initializer_list - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть

void f(std::initializer_list<int> x);
// .cpp
void f(std::initializer_list<int> x) { /* Lots of code */ }

В какой-то момент мне нужно также

inline void f(std::vector<int> x) { /* I want call f(initializer_list), but cant */; }

Мое решение

void f_inner(const int* x, std::size_t size);
inline void f(std::initializer_list<int> x) { f_inner(x.begin(), x.size(); } 
inline void f(std::vector<int> x) { f_inner(x.data(), x.size()); }
// .cpp
void f_inner(const int* x, std::size_t size) { /* Lots of code */ }

Может быть, есть более элегантное решение?Но я не хочу перемещать f_inner в .h и делать его шаблоном

1 Ответ

0 голосов
/ 23 сентября 2018

Используйте такой тип, как gsl span.

И списки векторов, и списки инициализаторов являются смежными контейнерами, а диапазон данных с константой может переноситься либо с нулевой стоимостью.

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