Ric*_*y65 8 c++ arrays initializer-list variadic-templates c++11
唯一且非常不方便的警告std::array
是,它不能从内置C数组的初始化列表中推断出它的大小,它的大小必须作为模板传递.
是否可以使用C++11
initializer_list 实现类似std :: array的容器(内置C数组周围的薄包装器)?
我问,因为,与std :: array不同,它会自动从初始化列表中推断出数组的大小,这样更方便.例如:
// il_array is the hypothetical container
// automatically deduces its size from the initalizer list
il_array <int> myarr = {2, 4, 6, 7, 8};
Run Code Online (Sandbox Code Playgroud)
如果没有提供初始化列表,我们还希望提供一个构造函数来指定大小.例如:
// construct a fixed size array of size 10
il_array <int> myarr2 (10);
Run Code Online (Sandbox Code Playgroud)
这也将使容器与其他标准容器(例如vector,deque和list)更加一致.
据我所知,由于包裹的C数组(如T elems [size])必须具有恒定大小且initializer_list的size()成员函数不是常量,因此不可能.
另外,我想知道是否有可能使用可变参数模板来实现这样的容器,尽管从我读过的内容我不认为这是可能的.
我认为你在这里运气不好。std::array 的巨大优点是它是一个 POD,并且可以静态初始化。
如果您有一个容器,其构造函数采用 std::initializer_list,则它必须复制这些值(除非它只是对初始值设定项的常量引用,这不是很有用)。
归档时间: |
|
查看次数: |
3490 次 |
最近记录: |