템플릿 클래스의 C++ 0x std :: array 멤버가 있고 두 개의 이터레이터가 필요한 생성자를 사용하여 초기화하려고한다고 가정 해 보겠습니다.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;
};
저장소의 크기와 일치하는 범위를 제공한다고 가정하면 저장소에 Tps라는 초소형 기본 생성자를 피하면서 생성자 이니셜 라이저에서 std :: array를 초기화 할 수 있습니까? 이 경우 std :: initializer_list <>을 악용 할 수 있습니까? 제
std::array
그런데 밑줄로 시작하고 뒤에 대문자가 오는 식별자는 예약되어 있습니다. 또한'std :: distance (first, last)'여야합니다. – GManNickG
감시가 고정되었습니다. 추가 기본 생성자의 문제는 여전히 남아 있습니다. –