c++functionheaderprivatedeclare

Avoiding declaring private functions in class header files (C++)


(In C++) I have a class whose structure is declared in a header file. That header file is included in lots of source files, such that when I edit it I need to recompile lots of files.

The class has a set of private functions which are only called in one source file. Currently they are declared in the class structure in the header file. When I add a new function of this type, or edit the arguments, it therefore causes recompilation of lots of files. I would like to declare the functions somewhere else, such that only the file that defines and calls them is recompiled (to save time). They still need to be able to access the internal class variables, though.

How can I achieve this?


Solution

  • There is no way to declare member functions of a class outside the main class declaration. So, if you want to declare, outside of the class in question, functions that can access member variables of a particular instance of the class, then I see no alternative but to pass that instance to the function. Furthermore, if you want the functions to be able to access the private and protected variables you will need to put them in a new class and make the original class a friend of that. E.g.

    header.h:

    class FooImpl;
    
    class Foo {
    public:
       int bar();
       friend class FooImpl;
    private:
       int var;
    }
    

    impl.cpp:

    #include "header.h"
    
    class FooImpl {
    public:
       int bar(Foo &);
    }
    
    int FooImpl::bar(Foo &foo) {
    return foo.var;
    }
    
    int Foo::bar() {
    return FooImpl::bar(*this);
    }