프로그래밍/C++

Template Aliases

ZenoAhn 2018. 1. 30. 22:36

typedef

이전부터 우리는 type을 다른 별명으로 호출하기 위해서 typedef를 많이 사용 해왔다.


예를들면 다음과 같은 코드들이 있다.


typedef int INT;
typedef unsigned long       DWORD;
typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;

using

using이라는 키워드는 선언 사용, using 지시문, 그리고 별칭 및 typedef에 사용 할 수 있다.


특히 C++ 11에서의 using은 기존 typedef처럼 Alias를 부여할 수 있다.


#include <iostream>
using namespace std;

using INT = int;

int main()
{
	INT a;
	a = 0;
	
	return 0;
}

사실 보기에는 typedef와는 똑같아보인다. 무엇이 다를까?


차이점

차이점은 기존의 typedef는 type만 Alias를 부여 할 수 있다.


다음의 코드를 살펴보자.


#include <iostream>
using namespace std;

using INT = int;

template<typename T, typename U>
struct Pair
{
	T first;
	U second;
};

typedef Pair<int, int> MyIntIntPair;

int main()
{
	MyIntIntPair a;
	
	return 0;
}

위 코드는 Pair라는 Template 구조체를 생성해서, typedef를 이용해 Pair의 first - int, second - int라는 결정된 타입 에 대해서 Alias를 부여하였다.


그렇다면, 첫번째 값은 int 타입, 두번째 값은 Template 형태로 만들고싶다면 다음과 같이쓰면 될까?


template<typename V>
typedef Pair<int, V> MyIntTemplatePair;

int main()
{
	MyIntTemplatePair<float> a;
	
	return 0;
}

이렇게 쓰면 다음과 같은 에러가 출력된다.


error C2823 : a typedef template is illegal

이제 using Keyword를 써서 다음과 같이 Template Alias를 사용 할 수 있다.


template<typename V>
using MyIntTemplatePair = Pair<int, V>;

int main()
{
	MyIntTemplatePair <float> a;
	
	return 0;
}


'프로그래밍 > C++' 카테고리의 다른 글

Uniform Initialization  (0) 2018.02.06
if statement  (0) 2018.02.06
Function Pointer 사용하기  (0) 2018.01.29
C++ Template이란  (0) 2018.01.14
List Vector Copy  (0) 2017.05.20