반응형

template 가 변수의 형에 상관없이 막(?) 넣어도 되게 해서 프로그래머의 노가다를 줄여준다는 말은 많이 들었는데;


template <class T>
T min(T a,T b)
{
 return (a<b) ? a : b;
}

그래서 소스를 찾아보니 이렇게 나와 있더군요, 최소값 구하는 함수.

그럼데 저걸 이해하려고 하니 쉽지가 없네요;

template <class T>

/* ...  아무거나 ... */

T min(T a,T b)
{
 return (a<b) ? a : b;
}


template와 T min(..,..) 사이에 어떤걸 넣으면 안되니까 붙어 있어야 한다는거 같은데;;;

결국 template로 만든 함수는 함수 원형을 정의 불가능 하다는거???

어지럽네요 -_-; T 대신에 TT를 넣어도 되네요. 그러므로 class 다음에 자기가 넣고 싶은것을 넣는다... 이런거 같은데


template<struct T> //->이렇게 하면 안되네요..? 왜하필 class 인지 원 -_-^

아;; 질문과 거리가 멀어졌는데, 정리하면

젤 위에 소스에 대한 설명을 아주 자세히 해주세요 -_-;



----------------------------------------------------------------------------------------

< > 이것들 대신에 " "이것을 사용하겟습니다.

template "class T"
T min(T a,T b)
{
return (a }



1. template "class T"

이 구문은 template "typename T"로 사용해두 되구요 저같은경우는 typename T로 사용하는중입니다...

T라는 이름에 대해서 정의하는 대상을 템플릿으로 선언한다는 뜻을 가지고 있거든요..

다시말해서 T는 인자의 자료형으로 인식 됩니다...

그리고 T대신에 다른 문자가 와두 상관이 없는데.. 일반적으로 T를 사용합니다.



2. T min(T a,T b)

이구문에서 처음의 T는 리턴하는 타입이고 min은 함수명이 되겟죠

(T a, T b)는 매개변수구요...



3. return (a
이 함수내의 내용인데... 작은값을 찾아서 리턴하는 구문이네요..





template "typename T"

T add(T a, T b)

{

return a+b;

}



int main(void)

{

cout << add(10,20) << endl;

cout << add(10.1, 20.2) << endl;

return 0;

}



이 구문을 돌리시면...

add(10,20) 부분에서는 T가 int 형으로 인식되고

add(10.1, 20.1)부분에서는 T가 double 형으로 인식이 됩니다.



그리고 둘이상의 타입에 대해서 템플릿화시키실려면...

template "typename T1, typename T2"로 해주시면

두개의 타입을 템플릿으로 받을수 잇겠죠?

반응형
Posted by Real_G