Split a C++ class declaration

c++

Solution

Yes, it is possible but not in the direct kind of way. Here is what you do:

my_object.h:

struct my_object {
  void fun();

  my_object();
  my_object(my_object const&);
  ~my_object();

  my_object& operator = (my_object);

protected:
  void pfun();

private:
  struct impl;
  std::unique_ptr<impl> pimpl;
};

my_object.cpp:

struct my_object::impl {
  void fun() { do stuff...}

  void pfun() { do other stuff... }

  int private_member;
};

my_object::my_object() : pimpl(new impl) {}
my_object::my_object(my_object const& o) : pimpl(new impl(*o.pimpl) {}
my_object::~my_object() {}

my_object& my_object::operator = (my_object o) { swap(pimpl, o.pimpl); return *this; }

void my_object::fun() { pimpl->fun(); }
void my_object::pfun() { pimpl->pfun(); }

As you can see, it's a lot of work and requires the heap. Everything in balance...use when you need to.

Problem

I want to know if I can split a C++ class declaration Original class ``` class P { private: int id; //some really secret method int secretMethod(); protected: int x; public: P(); int getX(); }; ``` I want to show in the .h only the public and protected method and attributes, and declare somewhere else the private, where the user of the class can't see it. Wanted class declaration: ``` class P { protected: int x; public: P(); int getX(); }; ``` Edit: I want that for: - I can change the implementation of the class and for the user of the class is transparent - Is easier for the user to see less information than more - If I change the implementation of the class, change the private atributes and method I don't want to change the .h for the user of the class

Original source

Related problems