(C++ : Template) 같은 데이터형이라도 포인터인지 아닌지에 따라 다른 template 생성 - 2

Posted by : at

Category : Cpp


// int2type의 발전된 형태이다.
#include <iostream>
using namespace std;

template<int N> struct int2type   // int말고 다른 타입은 안되나? char, short 등 ...
{
  enum { value = N };
};

int main()
{
  
}
template<typename T, T N> struct integral_constant
{
  static constexpr T value = N;
};

integral_constant<int, 0> t0;
integral_constant<short, 0> t1;

// 아래는 자주 사용되기에 c++에서 typedef을 둬서 보통 쓴다.
typedef integral_constant<bool, true> true_type;
/*
    static constexpr bool value = true; // 쓰겠다는 말
*/
typedef integral_constant<bool, false> false_type;
/*
    static constexpr bool value = false; // 쓰겠다는 말
*/

// is_pointer만들때
template<typename T>
struct is_pointer : false_type
{
};

template<typename T>
struct is_pointer<T*> : true_type
{
};
#include <iostream>
#include <type_trais> // for integral_constant
using namespace std;

template<typename T>
// void printv_imp(T v, int2type<1>)
void printv_imp(T v, true_type)
{
  cout << v << " : " << *v << endl;
}

template<typename T>
// void printv_imp(T v, int2type<0>)
void printv_imp(T v, false_type)
{
  cout << v << endl;
}

template<typename T>
void printv(T v)
{
  // printv_imp(v, int2tpye<xis_pointer<T>::value>());
  printv_imp(v, is_pointer<T>());
}

int main()
{
  int n = 3;
  printv(n);
  printv(&n);
}

// 코드 가독성의 향상을 가져온다.

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links