[정리] template 과 friend 함수


[정리] template 과 friend 함수

일반 함수도 있고, 함수 템플릿도 있다면 어떤 함수를 사용하게 될까? 템플릿을 사용하지 않고 일반 함수를 사용하게 된다. 그럼 foo(int) 버전 함수를 선언만 한다면? 컴파일러는 foo(int) 선언이 있으므로 foo(int)를 선택한다. 하지만 링크시에 foo(int)의 구현부를 찾을 수 없기 때문에 링크 에러가 발생한다. Point 클래스를 템플릿으로 바꿔보자. 에러가 난다. 이유와 해결책을 알아보자. friend 함수에서 Point<T>& 은 클래스 템플릿의 T로 인식한다. 일반 함수에 대한 템플릿 버전이 있지만 Point<int>를 선언하면서 클래스 템플릿의 모든 T는 int로 정해지고 따라서 friend의 함수도 const Point<int>& p라고 인식을 하기 때문에 선언은 있지만 구현부가 없다는 링크 에러를 뱉어낼 것이다. 클래스 T가 결정되면 friend 함수는 일반함수가 되는 것이다. [정리] 1. 함수 템플릿보다는 일반함수가 우선해서 선택된다. (exactly...


#const #friend #matching #ostream #template #친구함수 #템플릿 #함수

원문링크 : [정리] template 과 friend 함수