이제는 비 리프 클래스에 새로운 가상 함수를 추가하는 것이 좋지 않은 것으로 알고 있습니다. 다시 컴파일되지 않은 파생 클래스에 대한 이진 호환성을 손상시킵니다.순수한 가상 함수 및 이진 호환성
내가 예를 들어, 공유 라이브러리로 컴파일 된 인터페이스 클래스와 구현 클래스가 : 그러나, 나는 약간 다른 상황이
class Interface {
public:
static Interface* giveMeImplPtr();
...
virtual void Foo(uint16_t arg) = 0;
...
}
class Impl {
public:
...
void Foo(uint16_t arg);
....
}
내 주요 응용 프로그램이 공유 라이브러리를 사용을, 기본적으로 기록 될 수있다 로 : 즉
Interface* foo = Implementation::giveMeImplPtr();
foo->Foo(0xff);
는 응용 프로그램이 Interface
에서 파생 된 모든 클래스가없는, 그것은 단지 그것을 사용합니다.
class Interface {
public:
static Interface* giveMeImplPtr();
...
virtual void Foo(uint16_t arg) = 0;
virtual void Foo(uint32_t arg) = 0;
...
}
을하고 응용 프로그램을 다시 컴파일 할 필요없이 내 공유 라이브러리를 컴파일 : 이제
은, 내가 할 안전하다, 내가 Foo(uint32_t arg)
로 Foo(uint16_t arg)
에 과부하가하고 싶은 말은?
그렇다면 알고 있어야하는 특이한 경고가 있습니까? 그렇지 않은 경우 히트 및 라이브러리의 최신 버전을 가져 오는 이외의 다른 옵션이 있습니까?