(C++ : Template) 런타임에 데이터형을 지정해보자(IfThenElse)

Posted by : at

Category : Cpp


#include <iostream>
#include <typeinfo>
using namespace std;

template<bool b, typename T, typename F> struct IfThenElse
{
  typedef T type;
};

template<typename T, typename F> 
struct IfThenElse
{
  typedef F type;
};

int main()
{
  IfThenElse<true, int, double>::type t0;    // int
  IfThenElse<false, int, double>::type t1;  // double
  // 컴파일 시간에 bool값에 따라서 타입을 결정하게 해준다.
  
  cout << typeid(t0).name() << endl;
  cout << typeid(t1).name() << endl;
}
#include <iostream>
using namespace std;

template<bool b, typename T, typename F> struct IfThenElse
{
  typedef T type;
};

template<typename T, typename F> 
struct IfThenElse
{
  typedef F type;
};

template<size_t N>
struct Bit
{
//   int bitmap;
  using type = IfThenElse<(N <= 8), char, int>::type;
  type bitmap;
};

int main()
{
  Bit<32> b1;
  Bit<8> b2;
  
  cout << sizeof(b1) << endl;   // 4
  cout << sizeof(b2) << endl;   // 1
}
template<size_t N>
struct Bit
{
  using type = typename conditional <(N <= 8), char, int>::type;
  // 동일한 동작을 한다.
  type bitmap;
};

About Taehyung Kim

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

Star
Useful Links