据我所知,C++编译模型没有明确,直接的"导出类"方法.但是,您应该能够使用简单的C接口执行此操作:
#include "MyModule.h"
// class MyModule inherits Module
extern "C" Module * create_module() { return new MyModule; }
extern "C" void free_module(Module * p) { delete p; }
Run Code Online (Sandbox Code Playgroud)
现在,您可以动态加载该库和检索功能create_module和free_module和动态地添加自己的函数指针到您的系统:
std::map<std::string, std::pair<Module * (*)(), void(*)(Module *)> plugins;
plugins["MyClass"] = std::make_pair(..., ...); // the dynamically resolved
// function addresses
Run Code Online (Sandbox Code Playgroud)
事实上,你可能甚至不需要驱逐舰功能,因为普通的虚拟析构函数机器甚至可以在动态加载的库中工作.
例如:
std::unique_ptr<Module> make_module(std::string const & s)
{
auto it = plugins.find(s);
return { it == plugins.end() ? nullptr : it->second.first() };
}
Run Code Online (Sandbox Code Playgroud)