【发布时间】:2014-05-07 14:01:11
【问题描述】:
我想改变std::array<unsigned int, size>的结构如下:
-
myarray a {};应该构造[0,1,2,3,4...]而不是[0,0,0,0,...] -
myarray a {5,2};应该构造[5,2,2,3,4...]而不是[5,2,0,0,0...]
一个明显的解决方案是有一个类:
template <size_t size>
struct myarray {
std::array<int, size> ar;
myarray() { for (size_t i=0; i<size; i++) ar[i]=i; }
myarray(std::initializer_list<unsigned int> il) :ar(il) {
for (size_t i=il.size(); i<size; i++) ar[i]=i;
}
...
};
但是它迫使我包装ar 的每个成员。据我了解,从std::array 继承并不是一个好主意。有没有第三种合理的方式?
【问题讨论】:
-
my_make_array(std::initializer_list<T>)? -
@Jarod42 :您是在建议某种工厂功能吗?那么如何确保始终通过此函数构造数组?我不希望用户无意中调用常用的构造函数。
-
是的,我建议使用工厂功能。但它似乎不符合您的需求。
标签: arrays c++11 constructor