【发布时间】:2022-11-16 05:23:50
【问题描述】:
我想写一些代码如下:
using int_list_t = std::initializer_list<int>;
struct ThreeDimensionalBox {
static constexpr int_list_t kDims = {1, 2, 3};
};
struct FourDimensionalBox {
static constexpr int_list_t kDims = {4, 5, 6, 7};
};
template<typename Box1, typename Box2>
struct CombinedBox {
static constexpr int_list_t kDims = Box1::kDims + Box2::kDims; // error
};
using SevenDimensionalBox = CombinedBox<ThreeDimensionalBox, FourDimensionalBox>;
有什么方法可以修复CombinedBox 的实现,使SevenDimensionalBox::kDims 有效绑定到{1, 2, 3, 4, 5, 6, 7}?
我知道我可以用带有可变 int 模板参数列表的自定义模板类替换 std::initializer_list<int>,并通过标准元编程递归技术有效地实现串联。我只是想知道是否存在仅使用 std::initializer_list 的解决方案。
【问题讨论】:
-
你为什么在这里使用
std::initializer_list?这不是它的意思,你很容易导致悬空引用。您可能应该改用std::array。
标签: c++ template-meta-programming initializer-list