2017년 11월 23일 목요일

템플릿 함수에서의 Universal reference 사용

template <typename T>
void t_function(T& x) {}


위와 같이 템플릿을 만든다면 Rvalue 값을 사용할 때 이 템플릿을 사용하지 못하게 됨.
int val = 4;
t_function(val); // 가능
t_function(4); // 불가능, 적용 대상이 되는 템플릿 함수가 없음.


상수값 대응을 위애 아래처럼 2가지로 나눈다면...
template <typename T>
void t_function(T &x) {}

template <typename T>
void t_function(T x) {}

t_function(x); // 에러, 위 2가지 템플릿 모두 해당되어 ambiguous 오류
t_function(4); // 가능


위 모두 만족시킬수 있는 방법이 Universal References

template <typename T>
void t_function(T&& x) {}

댓글 없음:

댓글 쓰기