在 C++ 中,動態(tài)編譯接口可以通過使用插件(plugin)或者共享庫(shared library)來實現(xiàn)。這里給出一個簡單的示例,展示如何使用共享庫來實現(xiàn)動態(tài)編譯接口。
// plugin_interface.h
#pragma once
class PluginInterface {
public:
virtual ~PluginInterface() {}
virtual void execute() = 0;
};
// plugin_impl.cpp
#include "plugin_interface.h"
class PluginImpl : public PluginInterface {
public:
void execute() override {
// 實現(xiàn)插件的具體功能
}
};
g++ -shared -fPIC plugin_impl.cpp -o libplugin.so
// main.cpp
#include <iostream>
#include <dlfcn.h>
#include "plugin_interface.h"
typedef PluginInterface* (*CreatePluginFunc)();
int main() {
// 加載共享庫
void* handle = dlopen("./libplugin.so", RTLD_LAZY);
if (!handle) {
std::cerr << "Failed to load shared library: " << dlerror() << std::endl;
return 1;
}
// 獲取插件創(chuàng)建函數(shù)
CreatePluginFunc createPluginFunc = reinterpret_cast<CreatePluginFunc>(dlsym(handle, "createPlugin"));
if (!createPluginFunc) {
std::cerr << "Failed to find symbol 'createPlugin': " << dlerror() << std::endl;
dlclose(handle);
return 1;
}
// 創(chuàng)建插件實例
PluginInterface* plugin = createPluginFunc();
if (!plugin) {
std::cerr << "Failed to create plugin instance." << std::endl;
dlclose(handle);
return 1;
}
// 調(diào)用插件的 execute 函數(shù)
plugin->execute();
// 釋放插件實例和共享庫句柄
delete plugin;
dlclose(handle);
return 0;
}
g++ main.cpp -o main
g++ -shared -fPIC plugin_impl.cpp -o libplugin.so
./main
這個示例展示了如何在 C++ 中使用共享庫實現(xiàn)動態(tài)編譯接口。你可以根據(jù)自己的需求對這個示例進行擴展,例如添加插件注冊機制、支持多種插件類型等。