I'm trying to simplify a bunch of header file "include spaghetti" by using forward declarations and moving #includes into the implementation file. However, I keep coming upon the following scenario:
void someMethod(Bar::someType_t &val);
typedef std::vector<SomeClass> someType_t;
Unfortunately you don't have many choices and none is perfect.
First, the two obvious and unacceptable solutions:
typedefwhich totally defeats the purpose of using a
typedef, which you want to avoid.
The more interesting solutions:
typedefs in the same include and include that file. This creates code coupling between the classes though. You ought to do that only with related classes, else you are going to end up with a god include file and this could lead to a lot of recompiling when you add a
typedefto that file.
typedefs in it. Kind of annoying, but it works.
Those last two are like doing forward declarations but with added
typedefs. They reduce file interdependencies since you are rarely modifying the typedef file.
I'd say for most situations, the central include has the most benefit for hassle. Just be careful.