TODAY : / TOTAL :

120703_C++ :: Template

  • Share this:
반응형

 template <typename T>    // 템플릿
T Add(T a1, T a2)            // 함수 템플릿. => 함수를 만들어내기위한 "틀" 로 보면 됨.
{
 return a1 + a2;
}

//[2] 문장은...
template <> // 함수 템플릿의 특수화 [ 아래 함수의 자료형처럼 올때만 이 함수를 써라. ]
const char* Add(const char* a1, const char* a2) 
{
 char* temp = new char[strlen(a1)+strlen(a2)+1];
 memset(temp,0,strlen(a1)+strlen(a2)+1);

 strcat(temp,a1);
 strcat(temp,a2);

 return temp;
}

int main()
{
 cout << Add<int>(2,4) << endl;  //=> [1]
 cout << Add<double>(2.3,4.5) << endl;
 cout << Add<short>(1,3) << endl;
 cout << Add<double>(5.6,3.5) << endl;  // => [1] - 1
 cout << Add<char>('a','b') << endl;  (X)
// 빈칸 이 출력됨. a = 97 , b = 98 => 195가 리턴 됨. 195에 해당하는 아스키값이 없어서 빈칸 출력.
 
cout << (int)(Add<unsigned char>('a','b')) << endl; (0)
 // 원하던 195가 나옴. 지난번 메모리 구조 인식과 같은 결과.

 cout << Add<const char*>("abc","def") << endl;
// =>[2] 주소끼리 더해 짐. (정해진 주소공간이외의 사용은 불가능)


 return 0;
}



[1] 문장은...
다음과 같은 식으로 생성 된다.
 * 같은 자료형의 템플릿함수는 최초에 한번만 생성된다. [1] - 1

int Add<int>(int a1,int a2)
{
   return a1 + a2;
}

반응형

SEARCH

태그로 찾아보기