#include<iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// traits 이야기
// 1.Traints : T의 특질(특성)을 조사하는 기술 ...(template 에서 특성에 따라 받아들임이 다름을 이용하는 기술
// primary template 에서 false 를 리턴 (enum 상수가 false)
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
template<typename T> struct my_is_array
{
enum {size=-1};
enum {value = false};
};
template<typename T,int N> struct my_is_array<T [N]>
{
enum {size =N};
enum {value =true};
};
template<typename T> void foo(const T& a)
{
if(my_is_array<T>::value)
cout<<"배열 입니다" << my_is_array<T>::size <<endl;
else
cout<<"배열이 아닙니다" << endl;
}
/*
template<typename T>struct my_is_pointer
{
enum{ value = false};
};
template<typename T>struct my_is_pointer<T*>
{
enum{ value = true};
};
template<typename T>void foo(const T& a)
{
if(my_is_pointer<T>::value)
cout<< "T는 포인터 입니다"<<endl;
else
cout<<"T는 포인터가 아닙니다." << endl;
}
*/
/*
template<typename T> T Max(T a, T b)
{
//return 은 주소 비교를 할수 없기때문에.. 좀더 if 문을 넣어 똑똑하게 만들자
if(T is Pointer)
return *a < *b ? b : a;
return a< b ? b : a;
}
*/
int main()
{
//int x = 10, y = 20;
/*
Max(x,y);
Max(&x, &y);
*/
int x = 0;
int y[19];
foo(x);
foo(y);
}
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]32. 클라이언트에서 바인더로 통신방법의 원리 (0) | 2012.08.17 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의]31. 퍼팩트 포워딩 (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]29. 템플릿이야기3 (멤버함수 템플릿) (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]28. 템플릿이야기 2(클래스 템플릿) (0) | 2012.08.16 |
[SSM 안드로이드 프레임워크 개발 강의]27. 템플릿이야기 1 (0) | 2012.08.16 |