* noone:
>
I've got a fella working for me who is trying to convince me to change our
coding standards to using separate .h and .cc files for definitions and
implementations. I know this is a perfectly valid way of doing things but
in my mind it is kind of quirky. Here's why.
Rather, having all code in header files is the unusual way.
The first reason I'd resist deals with the simplicity of makefiles. When
including most code from headers where classes are protected by #ifdef
blocks the makefile doesn't have to have a separate build rule for each
class.
Builds nowadays are mostly automated. Anyway, even with hand-crafted
make files you can lay down some general rules.
Next, TTBOMK you need to do your classes in header files if you are going
to make them into generic templates...well, putting them into headers
isn't strictly a requirement but the other restrictions for (templatizable
code) would encourage only using headers.
Even template code can benefit from a separation into header and
implementation. For most template classes that means including the
implementation file in the header file. The main advantage is that the
header file can give a very concise overview and defines the logical
interface, whereas with just one big file it's not that clear what's
interface and what's implementation detail. A possible but very
improbable advantage is that with compiler support for 'export' (only
Comeau right now, as far as I know) this can also reduce build times.
I understand that there a a couple of reasons why you might want separate
definitions and implementation, such as when a class has a static data
member
Can be done in header file via template trick.
>, or if you intend to create a shared object library of class code,
AFAICS that is irrelevant except for the headers the client code needs.
but it seems to me that putting the code into the header files is a bit
more elegant and the other way would be more of a holdover from the old
days before templates.
I'm wondering what comments the upper echelon lurkers might have. Do they
agree with my reasoning, or can they give me reasons why I should
reevaluate my assertions.
One reason to separate the two is that with all the code in headers, any
build of the system involves all of the code, which is slow (precompiled
headers have their own problems). And with all code in header files,
you force a remake of dependent modules when only the implementation is
changed, compounding that problem. A third reason to separate is to be
free to use any implementation techniques that suit the problem, instead
of doing very "clever" things and going amok with namespacing.
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?