나는 C++ 프레임 워크를 작성하는 데 문제가있어 사용자가 사용하는 것보다 오버 헤드가 적어야합니다. 사용자는 프레임 워크의 BaseClass에서 파생 된 클래스가 포함 된 공유 라이브러리를 만들고 인스턴스의 파생 클래스를 반환하기 위해 extern "C"createInstance() - 메서드를 구현하여 프레임 워크에 자신의 작업을 게시 할 수 있습니다. 따라서 프레임 워크는 dlsym()을 사용하여 공유 라이브러리를 통해 createInstance-Method를 호출하여 사용자 클래스에 액세스 할 수 있습니다. 프레임 워크에서C++ 팩토리 패턴 : 명시 적 createInstance() 생성 - 메서드 자동으로
class BaseClass{}
class UserClass : public BaseClass{}
extern "C"{
BaseClass* UserXcreateInstance(){
return new UserClass();
}
}
:
typedef BaseClass* (*CreateInstance)();
void* handle;
CreateInstance createInstance;
handle = dlopen("libUserLibrary.so", RTLD_LAZY | RTLD_GLOBAL);
createInstance = reinterpret_cast <CreateInstance*> dlsym(handle, "UserXcreateInstance");
BaseClass* userX = createInstance();
내 질문 : 그것은 UserXcreateInstance() 생성 가능 - 것으로에게이 돈`t 사용자가 생각하는, 그래서 각 사용자 라이브러리에서 중복 방법을, 그것에 대해?
또 다른 방법은, 내가 직접를 통해 사용자 클래스의 생성자를 호출한다 생각했다 ...
가 나는 템플릿 + 매크로 수있을 것이라고 생각하지만 난 아직이 작업을 수행 할 수있는 방법을 발견하지 않았습니다 dlsym 및 적절한 이름 mangling. (나는 설정 파일에서 어떤 공간 + 클래스 이름을 알고)하지만 특히 생성자 호출은 일반 함수 호출과 동일하지만 매우 재미없는이에게 적절한 솔루션을 생각 말게
은 한 줄이 네보다 낫다 주셔서 감사합니다;) – Dudero
당신은 환영합니다! – bcsanches