C++ STL 프로그래밍(STL 소개 / 함수 템플릿)





1. C++ STL 소개
    - 클래스는 멤버 변수와 멤버 함수로 이루어져 이싿.
    - 템플릿을 이용하면 총칭화된(generic) 타입을 사용하는 클래스와 함수 만들 수 있다.
    - 템플릿을 사용하면 타입에 제약을 받지 않는 로직을 기술할 수 있다.
    - Generic Programming을 하기 위해 템플릿이 꼭 필요하다.
    - STL은 템플릿으로 만들어졌다.
    - 즉, STL은 Generic Programming 으로 만들어진 가장 대표적인 예


2. 함수 템플릿
    - 함수 인자의 타입에 제약받지 않는 함수를 템플릿을 사용하여 구현
        
    - 함수 인자의 타입 int 나 float 를 T로 Generic화
    - 이렇게 템플릿으로 만든 것은 해당 함수를 호출하는 부분에서 평가
    - 호출 할 때(코드에서 사용한 타입만), 해당 인자의 변수 타입을 가진 함수를 만든다
    - 만들어진 함수는 소스코드에 만들어지는게 아닌, 프로그램의 코드 영역에 만들어진다.
    - 때문에 컴파일 시간이 길어질 수 있고, 실행 파일의 크기가 커진다.

    * 함수 템플릿 개선
        - 함수 인자에 const와 참조를 사용
            

    * class T
        - typename 이 표준화 되기전에 사용한 표기법 class
            

    * 함수 템플릿 개선(다른 타입의 인자 넣기)
        - typename을 여러개 사용
            
        - 단, 이 때, 리턴 값을 어떤 타입으로 반환해야 하는지에 대한 버그가 생긴다.

    * 함수 템플릿 전문화
        - typename을 사용하지 않고, 인수 전달 시, 타입 형변환을 하여 함수 진행
            
            

    * 함수 템플릿 호출 순서 규칙
        1) 전문화된 함수
        2) 템플릿 함수
        3) 일반 함수

    * 논-타입(non-type) 함수 템플릿
        - 템플릿 메타 프로그래밍의 핵심!
            
        - template <반환타입, 전달Value타입> T 함수명(T const& 반환타입Value)
        - 위와 같이 템플릿 함수를 선언하여 타입이 다른 값 끼리 연산과 리턴 처리






댓글