함수 템플릿과 static 지역변수

template <typename T>
void ShowStaticValue(void)
{
	static T num = 0;
	num += 1;
	cout << num <, " ";
}

함수 템플릿 내에 지역변수 num이 static으로 선언되었다. 그런데 위의 ‘함수 템플릿’을 기반으로 컴파일러는 다음과 같이 ‘템플릿 함수’들을 만들어 낸다.

void ShowStaticValue<int>(void)

{

static int num = 0;

}

void ShowStaticValue<long>(void)

{

static long num = 0;

}

따라서 static 지역변수도 템플릿 함수 별로 각각 존재하게 된다.

클래스 템플릿과 static 멤버변수

위와 같다.

언제 temlpate,typename T>를 쓰고 template<>를 쓰는가?

지금쯤이면 알 듯? = 템플리스이 일부 또는 전부를 저으이하고 잇다는 사실을 컴파일러에게 알려야한다.

템플릿 static 멤버변수 초기화의 특수화

T SimpleStaticMem<T>::mem = 0;

SImpleStaticMem<int> 의 mem 도 0으로 초기화되고 long 도 초기화 된다.