[comp.lang.c++] one solution to the inlines in .h annoyance

cdk@neptune.dsc.com (Colin Kelley) (06/11/91)

Has anyone else out there been annoyed by the requirement that inline functions
be placed in the header file?  I understand why it's needed by the
implementation, but it really clouds development, since as implementation
details change, functions must be moved in and out of the header file as
they change between inline and not.

Well, this month we started in on code reviews for some C++ that I've been
involved in writing, and we clearly had a problem.  We wanted to review all
the code as a unit--the fact that a routine was inline was worth noting, but
not worth changing the order in which the functions were reviewed.

So, here's my solution.  Assume a module called with a header file 'module.h' 
and a C++ code file 'module.cc':

I left only the class declarations in 'module.h', combining all the inline
functions with those from 'module.cc' and placing all of this in 'module.code'.
Those functions which were intended to be inline were so indicated with the
'inline' keyword, as before.  At the end of 'module.h', I added the line

    #include "module-inline.h"

I then wrote a tool that scans 'module.code' and extracts all functions
beginning with 'inline' into 'module-inline.h', with the remainder of the
file going to 'module.cc'.  Of course this dependency is specified in the
Makefile, so the extraction happens automatically.

We've found this to be a real relief.  Now we need only add or remove one
word from the function definition to change its inline-ness.

Has anyone else been through this same reasoning?  What was your solution?

If there's interest, I can post my inline extractor tool.
  - it's written in C++ (of course!)
  - it does a complete job of scanning C++ (comments, quoted string, \ escapes,
    etc., using a set of reusable C++ classes I had already written)
  - it makes liberal use of 'new', which makes it really simple but not
    amazingly efficient (but it still runs in 2 seconds on our Sequent)

                        -Colin Kelley, Digital Sound Corporation
                        cdk%neptune%dschub@hub.ucsb.edu
                        ...!pyramid!ucsbcsl!dschub!neptune!cdk
                        (805) 566-3000 x3175