Próbuję napisać C++ 0x otoki wokół dlopen()/dlsym(), aby dynamicznie ładować funkcji z udostępnionych obiektów:Przechowywanie wskaźnik funkcji w std :: funkcja
class DynamicLoader
{
public:
DynamicLoader(std::string const& filename);
template<class Signature>
std::function<Signature> load(std::string const& functionName);
private:
void *itsLibraryHandle;
};
DynamicLoader::DynamicLoader(std::string const& filename)
{
itsLibraryHandle = dlopen(filename.c_str(), RTLD_LAZY);
if(!itsLibraryHandle)
{ /* Throw Some Error */ }
}
template<class Signature>
std::function<Signature> DynamicLoader::load(std::string const& functionName)
{
return <insert magic here> dlsym(itsHandle, functionName.c_str());
}
Czy istnieje sposób skonwertować wskaźnik funkcji void * zwrócony przez dlsym na funkcję std ::?
Dlaczego owinąć 'static_cast' w funkcję? –
@NiklasR: Nie pamiętam dokładnie, może po to, żeby pokazać, jak to zrobić w ogólny sposób –
Musiałem użyć 'reinterpret_cast', aby skompilować to na Linuksie. – Tom