C++11 별칭(using)
Programming/C++
2017. 10. 9. 00:58
[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 |