"Simon Elliott" <Simon at ctsn.co.uk> wrote in message
news:41debb25$0$23051$.. .
> For some time I've been using typedefs for STL containers for reasons
> outlined in:
>
> http://www.gotw.ca/gotw/046.htm
>
> However a major downside to this is that you can't forward declare a
> typedef of a STL container:
>
> #include <vector>
> struct foo
> {
> int f1;
> };
> typedef std::vector<foo> fooVector;
> // Can't forward declare fooVector
>
> However, by deriving a class from the container, it becomes possible to
> forward declare it:
>
> class fooVector
ublic std::vector<foo>{};
>
> This appears to allow me to treat fooVector as a std::vector<foo> and
> to forward declare it:
>
> class fooVector; // OK
>
> In general it's not recommended to inherit from STL containers because
> they don't have virtual destructors. Am I correct in thinking that the
> above usage is safe because I'm not dealing with the fooVector class
> polymorphically?
>
> Is there any way to improve on the above so that other developers don't
> inadvertantly use fooVector in a dangerous manner?
>
I'm not sure why you would want to forward declare that in the first
place...? A forward declaration is needed when you have a dependency on an
external class (or between classes in the same header), such as having a
pointer to another class inside your class. But if you're including the
<vector> header in your header, and you've successfully typedef'd it there,
what's to prevent you from including in instance of (or pointer to) that new
type it in your class? Why do you need to forward declare it? Like this:
// .h file
#ifndef MYVEC_H
#define MYVEC_H
#include <vector>
typedef std::vector<int>MyVector;
class VectorHolder
{
MyVector m_vector;
};
#endif
// end .h file
That works for me. What problem are you having that requires a forward
declaration?
-Howard
-Howard