keine Funktionsdeklaration im header
-
Hi!
Kann ich in einer Klasse, bestehend aus header und cpp-file, die Funktionsdeklaration einiger Funktionen im header umgehen???
Ich habe die entsprechenden Funktionen momentan als private deklariert, möchte aber das Interface so klein wie möglich gestalten.Danke schon mal in voraus!
ally78
-
je nachdem könntest du das Pimpl-Idiom auch auf Memberfunktionen anwenden.
//foo.hpp #ifndef FOO_HPP #define FOO_HPP class foo : boost::noncopyable { struct foo_impl; foo_impl *impl_m; public: foo(); ~foo(); int get() const; void set(int i); int calculate(); }; #endif //foo.cpp struct foo::foo_impl { int i; void calculate() { //<-- privater Member i+=100; } }; foo::foo() : impl_m(new foo_impl) { impl_m->i=0; } foo::~foo() { delete impl_m; } int foo::get() const { return impl_m->i; } void foo::set(int i) { impl_m->i=i; } int foo::calculate() { impl_m->calculate(); return impl-m->i; }
HTH
-
Mache ich oft so. Aber wenn schon Boost ins Spiel kommt, nehme ich lieber einen scoped_ptr. Der impliziert Nicht-Kopierbarkeit und spart das delete.
-
ally78 schrieb:
Hi!
Kann ich in einer Klasse, bestehend aus header und cpp-file, die Funktionsdeklaration einiger Funktionen im header umgehen???
Ich habe die entsprechenden Funktionen momentan als private deklariert, möchte aber das Interface so klein wie möglich gestalten.Danke schon mal in voraus!
ally78das macht man so:
class Foo{ public: Foo(); void bla(); ... virtual void blubb()=0; private: //ab hier nicht mehr lesen, du sau! das geht dich gar nix mehr an //PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL PAL //EOF //^Z void geheimeFunktion(); int attribut; };
übrigens gehöre private funktionen eh nicht zum interface. es bringt dir also nix im sinne der problemstellung.
-
operator void schrieb:
Mache ich oft so. Aber wenn schon Boost ins Spiel kommt, nehme ich lieber einen scoped_ptr. Der impliziert Nicht-Kopierbarkeit und spart das delete.
jup, wollte boost eigentlich nicht benutzen, aber dann war ich zu Faul den Copy-Ctor,Copy-Op private zu machen
http://www.boost.org/libs/smart_ptr/sp_techniques.html#pimpl