본문 바로가기

C++/[ecourse] C++ Template10

10. 템플릿 디자인 Thin Template 템플릿의 단점은 특정 타입에 대한 코드를 만들어냄으로써 발생하는 코드메모리의 증가임 이를 방지하기 위해 고안한 기술 T를 사용하지 않는 다른 인자들은 기반 클래스로 올리고 파생 클래스에서 T를 사용하는 함수들만 사용 // 기존 Vector template class Vector { T* buff; int sz; public: int size() const {} bool empty() const {} void push_front(const T& a) {} T& front() {} }; 이런 기존 모양의 Vector를 아래와 같이 변경 // 변경 후 Vector class VectorBase { protected: int sz; public: int size() const {} bo.. 2022. 10. 9.
9. 가변인자 템플릿-2 std::tuple 구현 tuple은 n개의 객체를 보관할 수 있는 템플릿 구조체 때문에 가변인자 템플릿으로 만들어졌다. #include template struct xtuple { static constexpr int N = 0; }; template struct xtuple : public xtuple { T value; xtuple() = default; xtuple(const T& v, const Types& ... args) : value(v), xtuple(args...) {} static constexpr int N = xtuple::N + 1; }; int main() { xtuple t3; } typename T, typename ... Types를 통해 맨 앞의 타입을 저장할 수 있음 .. 2022. 10. 7.
8. 가변인자 템플릿 가변인자 템플릿 n개의 인자를 받는 템플릿 0개일 수도 있고, 여러 개일 수도 있음 인자와 타입의 개수가 정해지지 않은 형태의 템플릿 tuple의 경우 가변인자 클래스 템플릿으로 되어 있음 인자를 0개를 줘도, 1개를 줘도, n개를 줘도 에러가 발생하지 않는다. // 가변인자 클래스템플릿 template class xtuple { }; // 가변인자 함수템플릿 template void foo(Types ... args) { } 타입의 경우 1개가 아니므로 관례상 Types로 통일 받는 인자쪽도 arg가 아닌 복수형 args로 통일 Parameter Pack C++11부터 지원 가변인자를 받는 함수의 경우 Parameter Pack을 통해 args를 사용할 수 있다. 인자가 몇 개 있는지 알고 싶으면 si.. 2022. 10. 6.
7. 템플릿 Type Traits 본 글은 코드누리의 Template Programming 강좌를 개인 학습 목적으로 정리한 글 입니다. https://www.ecourse.co.kr/course-status/ Type Traits 컴파일 시간에 타입에 대한 정보, 변형된 타입을 얻을 때 사용함 메타 함수라고도 불림 T가 포인터인지 알아내는 테크닉 #include #include // foo의 T가 포인터인지 알아내려면 구조체를 만듦 template struct xis_pointer { enum { value = false}; }; //부분 특수화 template struct xis_pointer { enum { value = true }; }; template void foo(T v) { // 부분 특수화를 통해 is_pointer 구.. 2022. 9. 30.