假设你有一个模板类的c ++ 0x std :: array成员,你想通过一个带有几个迭代器的构造函数来初始化它:
template <typename Tp, size_t N>
class Test
{
public:
template <typename Iterator>
Test(Iterator first, Iterator last)
{
if (std::distance(first,last) > N )
throw std::runtime_error("bad range");
std::copy(first, last, _M_storage.begin());
}
private:
std::array<Tp, N> _M_storage;
};
Run Code Online (Sandbox Code Playgroud)
假设您提供了与存储大小相同的范围,是否可以在构造函数初始化程序中初始化std :: array,从而避免存储中Tps的超级默认构造函数?在这种情况下是否可以利用std :: initializer_list <>?
不。
std::array
是一个聚合,因此您不会获得像采用迭代器的构造函数这样的特殊功能。(这实际上让我感到惊讶,因为std::initializer_list
我认为制作其他有用的构造函数没有什么坏处。也许有一个问题正在酝酿之中。)
这意味着使用迭代器在数组内复制数据的唯一方法是迭代,并且要做到这一点,必须array
已经构造好并准备好使用。
归档时间: |
|
查看次数: |
976 次 |
最近记录: |