簡體   English   中英

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

[英]How to accept both std::vector and std::initializer_list

我有

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 並使其成為模板

使用像 gsl span 這樣的類型。

向量和初始化器列表都是連續的容器,const 數據的范圍可以零成本包裝。

因此,您可以將一個組合在一起,以干凈地解決您的問題。 GSL 跨度本身阻止了它的錯誤嘗試,以保護自己免受由 ils 構建的懸空局部跨度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM