(C++ : Template) value_type 써보기

Posted by : at

Category : Cpp


void print_first_element(vector<int>& v)
{
  int n = v.front();
  cout << n << endl;
}

int main()
{
    // vector<int> v = { 1, 2, 3 };
    // 여기까지 해결

  vector<double> v = { 1, 2, 3 };   // error 
  print_first_element(v);   // (vector<int>& v) 이기에 error 
                            // -> 모든 자료형을 받을 수 있게 만들어보자.
}
template<typename T>
void print_first_element(vector<T>& v)
{
  T n = v.front();
  cout << n << endl;
}

int main()
{
    // vector<int> v = { 1, 2, 3 };
    // vector<double> v = { 1, 2, 3 };
    // 여기까지 해결

  list<int> v = { 1, 2, 3 };    // error
  print_first_element(v);       // vector<T>& v - 자료형이 달라서 error
}
template<typename T>
void print_first_element(T& v)
{
  typename T::value_type n = v.front();   
  // typename을 적는 이유는 컴파일러가 값으로 해석할 수 있기 때문이다.

  auto n = v.front();   // C++11 이후에는 이게 가능.
  cout << n << endl;
}

int main()
{
  // vector<int> v = { 1, 2, 3 };
  // vector<double> v = { 1, 2, 3 };
  list<int> v = { 1, 2, 3 };    
  print_first_element(v);       
}

template<typename T> class Vector
{
  T* buff;
  int size;
public:
  Vector(int sz, T value) {}
};

int main()
{
  Vector v(10, 3);
  list<int> s = {1,2,3};
  
  Vector v2(s);   // 이게 가능할까?
}
template<typename T> class Vector
{
  T* buff;
  int size;
public:
  Vector(int sz, T value) {}
  template<typename C> Vector(C c) {}
};

template<typename C> 
Vector(C c)->Vector<typename C::value_type>;
// 복사 생성자가 호출될 경우 이렇게 선언해 달라 컴파일러에게 전달(C++17기능)

About Taehyung Kim

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

Star
Useful Links