카테고리 없음

[C++] C++ 22일차 Template 1 함수

훈츠 2020. 4. 27. 12:34
반응형

 

안녕하세요. 훈츠입니다. 금일은 Template 키워드를 이용하여 함수에 적용 하는 방법에 대해 포스팅 합니다.

 

템플리트 (template)

 

  • 어떤 타입이라도 클래스 또는 함수에서 사용할 수있게 하는 역활을 한다.
  • 코틀린의 Generic 과 같은 개념 입니다.
  • 함수의 기능은 같은데, 매개변수의 타입만 다른 경우, 오버로딩을 통해서 해결할수도 있지만 템플릿을 이용하게 되면 다음과 하나의 함수로 해결이 가능합니다.
    • Ex) Add(int, int) , Add(float, float)
    • Ex) template<class T>void Add(A &a, B & b) { a + b }

 

 

형식 ( template 함수의 형식 )

  • 클래스안에 함수 앞에 붙이고, 함수는 원형만 선언
    • Template<class T> void IsEqual ( T & a, T & b ) { ….;
    • Template<class T, class U> IsEqual ( T & a, U & b ) { if ….

 

예제1 코드  (T 가하나인 경우)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class T> void Add(T& a, T& b) {
    cout << "a + b = " << a + b << endl;
}
 
int main(){
    int a = 5;
    int b = 10;
    float fa = 5.5;
    float fb = 2.2;
    Add(a, b);
    Add(fa, fb);
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

 

오버로딩을 사용하지 않고, 템플릿을 이용해 적용한 결과를 보시면 알수 있습니다. 매개변수 들어오는 형태로 복사해서 사용한다고 봐도 될것 같습니다.

 

 

예제2 코드 ( 두가지 T, U TYPE 받는 예시 )

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <class T, class U, int i> void Func(T str) {
    U buffer[i];
    strcpy(buffer, str);
    cout << buffer << endl;
}
 
int main(){
    char ss[] = "c++";
    char* pstr = ss ;
    Func<char*, char, 12>(pstr);
    return 0;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

 

Tips and Trick

 

strcpy 같이 deplicate 된 함수를 사용 하게 되면, 비주얼 스튜디오 에서 자체적으로 에러를 발생 시킵니다. 

이때, 새로운 함수에 대한 사용법을 익히면서 새로운 함수를 적용하는게 좋겠지만 빠른 코드 테스트를 하기 위해서

다음 옵션에 SDL 검사 옵션을 "아니오" 로 선택 하게 되면 deplicate 된 함수를 사용 할수 있습니다.