반응형

함수 템플릿을 구현하였을때  함수 내부에서 값의 타입이 필요할 경우

  • ::value_type 이용
  • 대신 auto 사용 가능
#include <iostream>
#include <vector>
#include <list>
using namespace std;

//컨테이너의 데이터 타입
template<typename T>
void print_first_element(T& v)
{
    // 1.값의 데이터 타입이 필요한 경우
    typename T::value_type n = v.front();
    
    // 2.값의 데이터 타입 대신 auto사용 가능
    auto n = v.front();
    
    cout << n << endl;
}

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

 

C++ 17에서 클래스 템플릿 타입 추론(Class Template Type Deduction)에서 value_type 사용 예

 

#include <iostream>
#include <vector>
#include <list>
using namespace std;

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

    template<typename C> Vector(C c) {}
};

// C++ 17의 클래스 사용자 정의 타입 추론을 정의할때 아래와 같이 값의 타입이 필요한 경우 auto 사용이 불가
template<typename C>
Vector(C c)->Vector<typename C::value_type>;

int main()
{
    Vector v(10, 3);
    
    // Vector에 list Container 인자로 넣을 경우, Container 내부 값의 타입 추론이 필요하다.
    list s = { 1,2,3 };
    Vector v2(s); 
}
반응형

+ Recent posts