std::初始值设定项列表来自现有的 std::array,而不枚举每个元素
std::initializer list from already existing std::array without enumerating each element
>假设我有一个具有以下构造函数的类:
class Foo {
Foo(std::initializer_list<uin8_t> args)
{
....
}
}
我有以下数组:std::array<uint8_t, 6> bar
.
现在我想使用bar
数组创建一个foo
的对象。有没有其他方法可以以以下方式进行:
Foo f (bar[0], bar[1], bar[2], bar[3], bar[4], bar[5]);
这种方式似乎有点复杂,感觉这不是它应该的方式。
那么,我可以从现有的数组创建std::initializer list
,而不枚举每个数组元素吗?
不,你不能这样做。 这个只接受initializer_list
并且没有能力接受一对迭代器或指针加大小的 API 是有缺陷的。 你几乎永远不会在野外看到这样的 API。
由于您无法修改"Foo",因此您可以创建自己的make_foo
方法来自动扩展数组:
struct Foo
{
Foo(std::initializer_list<int> args) {}
};
template <std::size_t N, std::size_t... Is>
auto make_foo(std::array<int, N>& arr, std::index_sequence<Is...>) -> Foo
{
return Foo{arr[Is]...};
}
template <std::size_t N>
auto make_foo(std::array<int, N>& arr) -> Foo
{
return make_foo(arr, std::make_index_sequence<N>{});
}
auto test()
{
std::array<int, 4> arr = {{1, 2, 3, 4}};
auto foo = make_foo(arr);
}
相关文章:
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- 标准::unordered_map 中的 std::array 的值初始化
- 确保编译时的特定 std::array 位置
- std::array的长度有大小限制吗?
- 将 std::array 移动到另一个 std::array
- 检查输入 std::array 指针数据是否等于某个常量数组
- 如何读/写或遍历 std::array 中的特定元素范围?
- 是否可以使用 std::array 作为 POD 结构的数据容器?
- 如何在C++中传递一个大小未知的 std::array?
- 将 std::array 推回 std::vector N 次的优雅方式
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- unqualified sort() -- 为什么它在 std::vector 上使用而不是在 std::array 上
- 按值返回 std::array
- 如何将变量内容常量转换为 std::array 的大小?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- 无法推断类中的类型,构造函数采用 std::array
- 为什么 char 可以在 std::array 中初始化为 nullptr,而不是单独初始化?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问