내 C++ 코드베이스에 플러그인 기능을 추가하려고합니다. 플러그인 작성자가 알아서는 안되는 배관을 플러그인에 포함해야하므로 (따라서 포함 파일을 간단하게 유지해야하기 때문에) 어려움이 발생합니다. 그럼이 설정입니다.플러그인이 기본 클래스에서 상속하는 C++ 플러그인 시스템
"PluginBase.h". 이것은 플러그인이 상속하는 클래스입니다.
class PluginBase {
virtual void PluginProcess() = 0; // the plugin-specific capability
};
"PluginPlumbing.h" 배관이 들어있는 클래스입니다.
class PluginPlumbing : public PluginBase {
void PlumbingFunction() {
// Some stuff
PluginProcess();
// Some more stuff
}
};
(DLL을로드하여/플러그인 때문에) 그것을() PlumbingFunction를 PluginPlumbing 클래스 인스턴스에 대한 포인터를 취득하고 부를 것이다 외부 프레임 워크 코드.
그러나 필자가 가진 수수께끼는 PluginPlumbing에서 실제로 상속받지 않는 PluginPlumbing 포인터에 DLL에서 가져온 PluginBase 포인터를 업 캐스트 할 수 없다는 것입니다. 그리고 나는 PluginPlumbing으로부터 Plugin을 상속받을 수 없다. 왜냐하면 Plugin 작가에게 배관을 노출시키는 제곱에 돌아 왔기 때문이다.
내가 상상할 수있는 유일한 해결책은 멋지게 상속하는 대신 PluginBase와 PluginPlumbing이 완전히 별개의 클래스라는 것입니다. PluginBase는 DLL/so에 의해 인스턴스화 될 것이고, PluginPlumbing 인스턴스는 프레임 워크에 의해 인스턴스화 될 것이고, PluginBase 포인터를 전달하여 배관 호출을 할 수있다. 그것에 대해 갈 유일한 해결책입니까?