template과 friend

phoenixKim·2022년 3월 16일
0

temp

목록 보기
2/11

//출처는 코드누리 입니다.

문제

  • 뭐가 호출될 것인가?

-> 정답은 int형이 출력됨.

  • 지금은?

-> 링크에러가 발생함.
왜냐하면 컴파일러가 int 함수를 호출해야 겠다고 판단을 함,
그런데 정의부가 없기 때문에 발생하는 것임.


이와 동일한 문제가 발생할 수 있는 코드가 있음.
template과 friend를 사용할 경우

-> 눈으로 보기에는 이상없지만, 빌드 해보면?
: 링크에러가 발생함...

왜냐하면?
클래스 내의 friend의 T는 이미 int로 형이 결정되므로, 템플릿 함수가 아닌
멤버함수로 변하게 됨.
앞서 확인한 결과대로 int형에 대한 정의부가 구현되어 있지 않아서
발생하는 것임.


해결책

  1. 그냥 클래스 내부에서 정의부를 구현하는 방법.
  2. 클래스 내부의 friend 선언의 템플릿을 다르게 하는 방법이 있음.

-> 더 효율 적인 것은 1번이다. 왜냐하면 2번의 경우는 불필요하게 다대다 방식임.

1번의 경우

2번의 경우

-> 출력함수는 해로운 템플릿 함수를 나타낸다는 의미임.
지금도 복잡하지만, 여러 번 보도록 하자.

profile
🔥🔥🔥

1개의 댓글

comment-user-thumbnail
2022년 5월 10일

안녕하세요 혹시 메일을 알 수 있을까요

답글 달기

관련 채용 정보