본문 바로가기
스터디/C++

[ C++ ] 함수 템플릿, 클래스 템플릿과 static

by 알 수 없는 사용자 2019. 12. 1.
template <typename T>
void StaticValue()
{
	static T num = 0;
	num += 1;
	cout << num << " ";
}

위와 같은 함수 템플릿에 static 변수를 선언하였다.

 

그럼 자료형 <int>와 <double>로 함수를 호출 시 어떻게 되는지 살펴보자.

실행결과는 컴파일러에 의해서 만들어진 템플릿 함수 별로 static 지역변수가 유지됨을 확인할 수 있다.

 

그럼 클래스 템플릿은 어떻게 될까?

template <typename T>
class ClassStaticValue
{
private:
	static T temp;
public:
	void Addtemp(T num)
	{
		temp += num;
	}

	void Showtemp()
	{
		cout << "temp : " << temp << endl;
	}
};

template <typename T>
T ClassStaticValue<T>::temp = 0;

위와 같은 클래스 템플릿에 static 변수를 선언하고, 클래스 외부에서 초기화를 하였다.

왜냐하면 객체 생성과 동시에 메모리 할당이 디는 것이 아니라 이미 메모리 할당이 되어있는 상태이기 때문이다.

 

 

 

실행결과는 컴파일러에 의해서 만들어진 템플릿 클래스 별로 static 멤버 변수가 유지됨을 확인할 수 있다.

 

앞서 보인 예제에서 static 멤버를 다음과 같이 초기화하였다.

template <typename T>
T ClassStaticValue<T>::temp = 0;

 

static 멤버 초기화 부분도 특수화하여 특정 자료형에서 원하는 값을 부여할 수 있다.

template <>
T ClassStaticValue<double>::temp = 10.5;