kostenloser Webspace werbefrei: lima-city


Implementierung/Design einer Klasse für eine ladbare shared librarry

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    cpp0x

    cpp0x hat kostenlosen Webspace.

    Mich würde interessieren, wie euch diese Klasse gefällt? (Grade entworfen )

    Wie kann man diese noch schöner gestalten? In Kommentaren habe ich das jeweilige äquivalent von Windows erwähnt. (Hoffe die Namen stimmen so )

    #pragma once
    #include <string>
    #include <dlfcn.h>
    #include "exception.hpp"
    
    typedef void* Module_t;
    
    class ModuleException : public IException { public: ModuleException(const char* w) : IException(w) {}  };
    
    class Module {
    private:
       Module_t module_handle;
    public:
       Module() : module_handle(NULL) { } //Call the Open Later
       Module(std::string file) { Open(file); } //We can't call Open() later
       ~Module() {
          if(module_handle != NULL) {
             dlclose(module_handle); //FreeLibrary on Windows?!
          }
       }
       template<typename T> void Invoke(std::string name, T &funktion) {
          void *function=NULL;
          function=dlsym(module_handle,name.c_str()); //GetProcAddress on Windows?!
          if(function == NULL) {
             throw ModuleException(dlerror()); //the symbol wasn't found
          }
          else {
             funktion=reinterpret_cast<T>(function); //now we are casting our symbol to the requested function pointer
          }
       }
       void Open(std::string file) {
          if(module_handle == NULL) {
             module_handle=dlopen(file.c_str(),RTLD_NOW); //LoadLibrary on Windows?!
             if(module_handle == NULL) {
                throw ModuleException(dlerror()); //couldn't find the file?
             }
          } else {
             throw ModuleException("we tried to open the library a second time");
          }
       }
    };


    Was kann man noch für Eigenschaften implementieren? Ist das mit den Exceptions gut gelöst? Oder würdet ihr einfach auf std::cout ausgeben? Ist die Invoke mit dem Template so gut gelöst? (Optimierbar?!)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!