[C++] Template 사용법


Study/C , C++ , MFC  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 신고 |  수정/삭제

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