Template, Forward Class Declaration and Typedef
Now that I'm back to the C++ wonder land, it's time to re-familiarize myself with the basic.
In C++, ideally, you should "forward declare" a class and only include its full declaration when necessary, since this would minimize the dependency relationship between files and cut down build time:
class A;
...
void foo(const A& a);
But things can quickly get problematic when there is typedef involved, for example in the previous case, if A is later typedefed as:
typedef B A;
Compiler will complaint that A is defined in two places with different type. To do this cleanly, you need:
class B; //forward declaration of B first
typedef B A; //now typedef A
...
void foo(const A& a);
But what if B is a template, something like:
typedef vector<B> A; //now typedef A
Unfortunately, I have yet find a way to make this work...