반응형
함수 템플릿을 구현하였을때 함수 내부에서 값의 타입이 필요할 경우
- ::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);
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 파라미터(Template parameters) (0) | 2021.01.02 |
---|---|
C++ 템플릿 template 키워드 (0) | 2021.01.01 |
c++ 템플릿 typename (0) | 2020.12.31 |
C++ 템플릿 template과 friend (0) | 2020.12.31 |
C++ 템플릿 일반화된 복사 생성자(Generic copy constructor) (0) | 2020.12.31 |