dll & headerdatei



  • Hallo,
    ich habe eine Klasse k, die in der Datei k.h definiert und deren Methoden in k.cpp implementiert sind. Es gibt sowohl private als auch public-Methoden. Ich möchte das ganze jetzt als dll kompilieren. Mein Problem bei der Sache. Wenn ich jetzt zu einem neuen Projekt die Header-Datei k.h hinzufüge und die k.dll hinzulinke, zeigt mir VisualStudio alle Methoden (also auch die private, auf die ich sowieso nicht zugreifen kann und möchte) an, wenn man z.B. eine Instanz I von k erzeugt hat und dann folgendes schreibt:

    k* I; 
         I->
    

    Diese IDE zeigt ja dann komfortablerweise immer alle Methoden und Objekte an, auf die ich nun zugreifen kann, private Methoden werden dabei mit so einem kleinen Schloß gekennzeichnet. Ich möchte aber, dass nur die public-Methoden angezeigt werden. Wie kann ich das erreichen ?
    Danke schonmal im voraus.
    konstantin



  • mit dem Pimpl-Idiom kannst du das erreichen

    //foo.hpp
    class foo {
      struct foo_impl;
      foo_impl *impl_m;
    public:
      foo();
      foo(const foo &f);
      foo &operator=(const foo &f);
      ~foo();
    
      void bar(int i);
      int baz() const;
    };
    
    //foo.cpp
    #include <cstring>
    
    struct foo::foo_impl {
      int i;
      int baz() const { return i*10; }
    };
    
    foo::foo() : impl_m(new foo_impl)
    { impl_m->i=0; }
    foo::~foo() { delete impl_m; }
    foo::foo(const foo &f) : impl_m(new foo_impl(f.impl_m) { }
    foo &foo::operator=(const foo &f) {
      std::memmove(impl_m,f->impl_m,sizeof(f));
      return *this;
    }
    
    void foo::bar(int i) { impl_m->i=i; }
    int foo::baz() const { return impl_m->baz(); }
    

    (so ungefähr)



  • 😕
    ähem...Was daran ist denn das pimpl-Idiom ?? Das sieht alles recht kompliziert aus und ich bin mir nicht so ganz sicher, ob es das ist, was ich brauch. In deiner Header sind doch auch noch zwei private Objekte (foo_impl und impl_m), diese müssten doch dann auch angezeigt werden, wenn man nun die Header irgendwo inkludiert und dann z.B.
    foo* I;
    I->
    schreibt (code-tags funzen gerade irgendwie net). Außerdem: muß die .hpp-datei nicht von der .cpp-datei inkludiert werden ?
    Trotzdem mal dankeschön für die Mühe
    Gruß
    konstantin



  • Was daran ist denn das pimpl-Idiom ??

    das Pimpl-Idiom ist die Struktur, mit der du die privaten-Daten deiner Klasse von der öffentlichen Schnitstelle abkapselst.

    Mit den 2 Symbolen im privaten-Bereich musst du einfach leben oder mal im Handbuch deiner IDE nachgucken, ob man vielleicht mit irgend welchen #pragmas oä. Teile des Codes der Autocompletion entziehen kann



  • Okay, dankeschön !


Anmelden zum Antworten