Item 41: Understand implicit interfaces and compile-time polymorphism
class Widget
{
public:
Widget();
virtual ~Widget();
virtual std::size_t size() const;
virtual void normalize();
void swap(Widget& other);
};
void doProcessing(Widget& w)
{
if (w.size() > 10 && w != someNastyWidget)
{
Widget temp(w); temp.normalize(); temp.swap(w);
}
}
-
doProcessing 함수 안에 있는 w는 인터페이스를 소스 코드에서 찾으면 어떤 형태인지 확인할 수 있으므로, 이런 인터페이스를 가리켜 명시적 인터페이스(explicit interface)라고 합니다.
-
Widget의 멤버 함수 중 몇 개는 가상 함수이므로, 이 가상 함수에 대한 호출은
런타임 다형성(runtime polymorphism)에 의해 이루어집니다.
template<typename T>
void doProcessing(T& w)
{
if (w.size() > 10 && w != someNastyWidget)
{
T temp(w); temp.normalize(); temp.swap(w);
}
}
-
w가 지원해야 하는 인터페이스는 size, normalize, swap등 몇 개의 표현식이 유효(valid)해야합니다. 이런 표현식을 T가 지원하는 암시적 인터페이스(implicit interface)라고 합니다.
-
템플릿 함수를 호출을 시킬 때 해당 호출을 성공시키기 위해 템플릿의 인스턴스화가 일어납니다. 이러한 인스턴스화가 일어나는 시점은 컴파일 도중이기 때문에 이를 컴파일 타임 다형성(compile time polymorphism)이라고 합니다.
Author And Source
이 문제에 관하여(Item 41: Understand implicit interfaces and compile-time polymorphism), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@morphine/Item-41-Understand-implicit-interfaces-and-compile-time-polymorphism저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)