Сохранение указателя на функцию в std :: function

Я пытаюсь написать оболочку C ++ 0x вокруг dlopen () / dlsym () для динамической загрузки функций из общих объектов:

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());
}

Есть ли способ преобразовать указатель функции void *, возвращаемый dlsym в std :: function?

12
задан rcv 22 January 2011 в 22:13
поделиться