【发布时间】:2018-09-23 08:42:55
【问题描述】:
我有
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 并使其成为模板
【问题讨论】:
-
你真的不需要
std::initializer_list重载。只需坚持使用const std::vector<int>&,它将涵盖您的用例。如果您想选择不使用std::initializer_list动态分配,那么您的解决方案很好。 -
是的,你是对的。我没想到:)
-
您不喜欢您的解决方案的哪些方面?如果有的话,我会将
f_inner移至 .cpp - 但否则它会满足您的需求,对吧?