如何同时接受std :: vector和std :: initializer_list

时间:2018-09-23 08:42:55

标签: c++ c++17

我有

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 :(得分:1)

使用gsl span之类的类型。

向量列表和初始化列表都是连续的容器,到const数据的范围可以以零成本包装。