[The C++ Programming Language에서 발췌]


    뜻밖에도 타입이나 템플릿에 대해 별명을 도입하는 것이 유용할 때가 많다. 예를 들어 표준 헤더 <cstddef>에는 아마도 다음과 같은 별칭 size_t에 대한 정의가 포함돼 있을 것이다.


    1
    using size_t = unsigned int;;
    cs


    size_t란 이름이 붙은 실제의 타입은 구현별 정의 사항이므로, 다른 구현에서는 size_t가 unsigned long일 수도 있다. 별칭 size_t를 쓰면 프로그래머가 이식 가능한 코드를 작성하는데 도움이 된다.

    타입의 템플릿 인자와 관련된 타입 별칭은 많은 경우 매개변수화 타입에 의해 제공된다. 예를 들면 다음과 같다.


    1
    2
    3
    4
    5
    6
    template<typenae T>
    class Vector {
    public :
        using value_type = T;
        //...
    }
    cs


    실제로 모든 표준 라이브러리 컨테이너는 자신의 값 타입의 이름으로 value_type을 제공한다. 이 덕택에 이런 규약을 따르는 모든 컨테이너에서 동작되는 코드를 작성할 수 있다. 예를 들면 다음과 같다.


    1
    2
    3
    4
    5
    6
    7
    8
    template<typename C>
    using Value_type = typename C::value_type;
     
    void algo(Container& c)
    {
        Vector<value_type<Container>> vec;
        // ... vec를 사용한다 ...
    }
    cs


    별칭 메커니즘은 템플릿 인자의 일부 또는 전부를 연결해서 새로운 템플릿을 정의하는데 사용될 수 있다. 예를 들면 다음과 같다.


    1
    2
    3
    4
    5
    6
    7
    8
    template<typename Key, typename Value>
    class Map {
        // ...
    }
     
    template<typename Value>
    using String_map = Map<string, Value>;
    String_map<int> m; // m은 Map<string, int>ㅣ다.
    cs


    Posted by Muramasa