【发布时间】:2011-03-19 16:37:35
【问题描述】:
假设你有一个模板类的 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;
};
假设您提供的范围与您的存储大小一致,是否可以在构造函数初始化程序中初始化 std::array,从而避免存储中 Tps 的多余默认构造函数?在这种情况下是否可以利用 std::initializer_list ?
【问题讨论】:
-
顺便提一下,保留以下划线开头后跟大写字母的标识符。另外,它应该是
std::distance(first, last)。 -
监督已修复。额外的默认构造函数的问题仍然存在......