[C++] Template 사용법

공부/C 언어  2013.03.23 13:44



안녕하세요 명월입니다. 이번 포스팅에서는 C++ 에서 자주 사용되는 Template 에 대해 알아 보겠습니다.


이 Template 매크로는 자주 사용하면서도 많은 사람들이 이해하기 어렵다(?) 라고 생각되는 부분입니다. 그러나 이 Template 를 매크로라고 생각되면 이해하기 아주 쉬워 집니다.

매크로란 뭐랄까 실제로 코드가 그렇게 컴파일이 되는게 아니고 다시 그려진다라는 느낌입니다.

그럼 먼저 예제로 알아보록 하겠습니다.


#include "stdafx.h"
#include <iostream>

using namespace std;

class TemplateTest
{
public :
	TemplateTest()
	{
		printf("Template 예제 입니다.\r\n");
	}
	void funtion()
	{
		printf("Template function 호출\r\n");
	}
};
class TemplateTest2
{
public :
	TemplateTest2()
	{
		printf("Template2 예제 입니다.\r\n");
	}
	void funtion()
	{
		printf("Template2 function 호출\r\n");
	}
};
class Test
{
public:
	Test()
	{
		TemplateTest* ex = TemplateExFunction<templatetest>();
		TemplateTest2* ex2 = TemplateExFunction<templatetest2>();

		FuntionCall<templatetest>(ex);
		FuntionCall<templatetest2>(ex2);		
	}
	~Test()
	{
	}
private:
	template <typename T>
	T* TemplateExFunction()
	{
		return new T();
	}
	template <typename T>
	void FuntionCall(T* Data)
	{
		Data->funtion();
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	 new Test();
	 return 0;
}


먼저 소스를 살펴 보면 Test라는 클래스 생성자에서 Template을 사용하고 있습니다.

소스 해석을 보면 TemplateTest* ex = TemplateExFunction<templatetest>(); 부분이 있습니다.

앞이야 포인터로 주소값을 넣는 부분이고 유심히 봐야 할 부분은 TemplateExFunction<templatetest> 입니다.


분명 아래의 TemplateExFuntion 함수를 부르고 그 뒤에는 <클래스 이름> 을 넣었습니다.

아래 함수에서는 typename T라는 부분이 보이실 겁니다.


아주 쉽게 설명하자면 저 함수의 T라고 쓰이는 부분이 templatetest 클래스로 전부 대체(?) 되는 형태입니다. 

즉 Return 값이 new templatetest () 가 되겠네요.

Templatetest * ex = new Templatetest () 라는 형태가 되는 것 입니다.


나머지도 똑같은 형태로 이해 하시면 되겠습니다.





댓글 2개가 달렸습니다.
댓글쓰기
  1. larer
    2014.02.18 15:12 신고 |  수정/삭제  댓글쓰기

    <>안이 TemplateTest랑 TemplateTest2가 되어야 하는게 아닌가요?
    다 소문자로 적으셨는데

    • 明月 v명월v
      2015.01.12 11:45 신고 |  수정/삭제

      블로그 방문 감사합니다. 꽤 오래전이라 기억도 가물가물 하네요..이게 무슨 포스팅이었는지..