Estoy intentando escribir una C++ 0x envoltura alrededor dlopen()/dlsym() para cargar dinámicamente las funciones de los objetos compartidos:Almacenamiento de puntero de función en función std ::
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());
}
¿Hay una manera para convertir el puntero de función void * devuelto por dlsym en una función std ::?
¿Por qué envolver 'static_cast' en una función? –
@NiklasR: No recuerdo exactamente, tal vez solo para demostrar cómo hacerlo de manera genérica –
Tuve que usar 'reinterpret_cast' para compilarlo en Linux. – Tom