본문 바로가기

C++(oF)

템플릿을 일반 클래스처럼 2개의 파일로 나누기




일반적인 템플릿 사용법은 이러하다(책에서 이렇게 나오더라)


Calc.h


//

//  Calc.h

//  TemplateTest

//

//  Created by SuperSc on 2015. 1. 6..

//  Copyright (c) 2015 SuperSc. All rights reserved.

//


#ifndef __TemplateTest__Calc__

#define __TemplateTest__Calc__


#include <stdio.h>





//class

template<typename T>

class Calc

{

public:

    Calc();

    T multiply(T x , T y);

    T add(T x , T y);

};







template <typename T>

Calc<T>::Calc()

{

    printf("create calc \n");

}



template <typename T>

T Calc<T>::multiply(T x, T y)

{

    return x * y;

}



template <typename T>

T Calc<T>::add(T x, T y)

{

    return x + y;

}







#endif /* defined(__TemplateTest__Calc__) */

 




클래스 선언부와 구현부를 한 파일에 담았다. 

이유라고는 간단히 컴파일 타임에 사용되는 템플릿함수를 캐치 하여 코드를 알아서 만들어 빌드 하기 때문이라고 한다.

문제는 저렇게 간단한 메소드 3개 일때는 상관없다만, 가뜩이나 어지러운 c++ 문법을 혼돈의 카오스로 몰고 가는 지름길이 바로 이러한 표현 법이 아닐까.. 


그래서 원초적인 꼼수를 발견 하였다.





Calc.h

//  Calc.h

//  TemplateTest

//

//  Created by SuperSc on 2015. 1. 6..

//  Copyright (c) 2015 SuperSc. All rights reserved.

//


#ifndef __TemplateTest__Calc__

#define __TemplateTest__Calc__


#include <stdio.h>





//class

template<typename T>

class Calc

{

public:

    Calc();

    T multiply(T x , T y);

    T add(T x , T y);

};






#include "Calc.hpp"






#endif /* defined(__TemplateTest__Calc__) */

 




Calc.hpp

//

//  Calc.hpp

//  TemplateTest

//

//  Created by SuperSc on 2015. 1. 6..

//  Copyright (c) 2015 SuperSc. All rights reserved.

//


#include "Calc.h"



template <typename T>

Calc<T>::Calc()

{

    printf("create calc \n");

}



template <typename T>

T Calc<T>::multiply(T x, T y)

{

    return x * y;

}



template <typename T>

T Calc<T>::add(T x, T y)

{

    return x + y;

}

 



바로 빨간색으로 표시한 #include "Calc.hpp" 로 인하여 아래의 hpp 파일을 붙여 버리기 때문에 syntax 에 문제가 발생하지 않는다.





추가 : Xcode 에서 바로 복사 붙여넣기를 하면 별도의 하이라이터를 사용하지 않아도 자동으로 하이라이팅을 한다