Допустим, у вас есть член 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)
. - person GManNickG   schedule 22.07.2010