[C++] 스터디 CPPALOM 16주차: Effective C++ Item 46~53
파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>16주차 – Effective C++ item 46~53 한수빈 # <br>항목46: 타입 변환이 바람직할 경우에는 비멤버 함수를 클래스 템플릿 안에 정의해 두자 * 템플릿 코드는 암시적 타입 변환을 고려해 정적 코드를 생성하지 않는다. * 다음 코드는 컴파일 에러를 일으킨다! * int형 2가 Rational 자료형으로 암시적 변환될 수 없기 때문이다. ```C++ template<typename T> class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator() const; const T denominator() const; }; template<typename T> const Rational<T> operator*( const Rational<T>& lhs, const Rational<T>& rhs); Rational<int> oneHalf(1, 2); Rational<int> result = oneHalf * 2; ``` * 대신, 클래스 템플릿 안에 프렌드를 이용해서 선언하면, 프렌드 함수의 선언은 템플릿의 인자추론에 영향을 받지 않는다. * 선언 자체는 일반적인 함수가 되는 것과 마찬가지이다! * 하지만 이는 링크가 되지 않는다. * 클래스 자체는 선언되었으며, friend 멤버 함수는 non-template 함수로 컴파일된다. * 하지만 링커는 non-template 함수를 찾을 수 없다. template 함수만 존재하기 때문이다! ```C++ template<typename T> cla...