Page 155

// 복제 생성자와 대입 연산자를 명시적으로 디폴트로 지정한다. Grid(const Grid& src) = default; Grid<T, Container>& operator=(const Grid& rhs) = default; // 이동 생성자와 대입 연산자를 명시적으로 디폴트로 지정한다. Grid(Grid&& src) = default; Grid<T, Container>& operator=(Grid&& rhs) = default; typename Container::value_type& at(size_t x, size_t y); const typename Container::value_type& at(size_t x, size_t y) const; size_t getHeight() const { return mHeight; } size_t getWidth() const { return mWidth; } static const size_t kDefaultWidth = 10; static const size_t kDefaultHeight = 10; private: void verifyCoordinate(size_t x, size_t y) const; std::vector<Container> mCells; size_t mWidth = 0, mHeight = 0; };

이렇게 하면 T와 Container라는 템플릿 매개변수를 갖게 된다. 따라서 이전에 Grid<T>로 작 성한 부분을 Grid<T, Container>로 변경해야 한다. 또한 mCells를 vector의 vector가 아닌 Container의 vector로 수정한다.

생성자를 정의하는 코드는 다음과 같다. template <typename T, typename Container> Grid<T, Container>::Grid(size_t width, size_t height) : mWidth(width), mHeight(height) { mCells.resize(mWidth); for (auto& column : mCells) { column.resize(mHeight); } }

22장 고급 템플릿 1075

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement