Çalışma zamanında sınıfları yükleyemezsiniz, çünkü C++ derlenmiş bir dildir ve sınıflar çalışma zamanında mevcut değildir. Nesneler (sınıf örnekleri) yapar.
Yapabilecekleriniz, paylaşılan kütüphaneleri çalışma zamanında yüklemek ve belirli bir arabirimin nesnelerini oluşturmasını sağlamaktır.
En az eklenti uygulaması, eklentinizin arabirimini ve bu arabirime sahip nesneler oluşturacak olan fabrika işlevinin arabirimini tanımlar. Paylaşılan kitaplığı çalışma zamanında yükleyeceksiniz, fabrika işlevini belirli bir adla bulacaksınız ve bir nesne oluşturmak için fabrika işlevini çağıracaksınız.
// plugin.h start
#include <memory>
struct PlugIn // interface
{
virtual ~PlugIn() = 0;
virtual void doSomething() = 0;
};
extern "C" {
typedef std::auto_ptr<PlugIn> PlugInFactoryFn();
// A plugin .so must export this one factory function.
std::auto_ptr<PlugIn> createPlugIn();
}
// plugin.h end
// somewhere in you application
#include "plugin.h"
#include <assert.h>
#include <dlfcn.h>
std::auto_ptr<PlugIn> loadPlugIn(char const* filename)
{
void* so = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
assert(so);
void* factory_function = dlsym(so, "createPlugIn");
assert(factory_function);
return reinterpret_cast<PlugInFactoryFn*>(factory_function)();
}
int main()
{
std::auto_ptr<PlugIn> a(loadPlugIn("a.so"));
std::auto_ptr<PlugIn> b(loadPlugIn("b.so"));
a->doSomething();
b->doSomething();
}
Önerilen çözümlerinizi, bildirmediğiniz bir sorun için gönderdiniz. İhtiyaçlarınız nelerdir? –