Sto cercando di scrivere un C++ 0x wrapper dlopen()/dlsym() per caricare dinamicamente le funzioni da oggetti condivisi:Memorizzazione puntatore a funzione in std :: funzione
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());
}
Esiste un modo convertire il puntatore di funzione void * restituito da dlsym in una funzione std ::?
Perché hai avvolgere 'static_cast' in una funzione? –
@NiklasR: Non ricordo esattamente, forse solo per dimostrare come farlo in modo generico –
Ho dovuto usare 'reinterpret_cast' per ottenere la compilazione su Linux. – Tom