我有
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并将其作为模板
答案 0 :(得分:1)
使用gsl span之类的类型。
向量列表和初始化列表都是连续的容器,到const数据的范围可以以零成本包装。