Split a C++ class declaration

后端 未结 5 844
野的像风
野的像风 2021-01-06 01:46

I want to know if I can split a C++ class declaration

Original class

    class P
    {
        private: 
           int id;
           //some really          


        
5条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-06 02:13

    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 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.

提交回复
热议问题