Re: fwd declaring STL containers
LR wrote:
Mark P wrote:
Is there any way to forward declare STL container classes such as
list, set, map, etc.? (My impression is that there isn't, since
these are all defined in std.)
To Mark: there can be, but it would be implementation-specific.
Failing that, consider the following snippet of code:
//////////
#include <list>
template <class Ty = int>
struct Foo
{
typedef std::list<Ty> Type;
};
//////////
If this block of code were included in a translation unit that never
made any further reference to Foo or Foo::Type, is it reasonable to
assume that the compiled code would not be any larger?
To Mark: Yes.
(I understand
this is an implementation issue, but your experience and intuition
would be very helpful.) FWIW, my testing on gcc indicates no
difference.
Could you expand on this a little bit?
Have you tried to compare something like:
int main() {
static Foo f;
}
and
int main() { }
What's the connection? Mark's code defines a type. Your code defines
an object. Types are not objects. Types do not take up any memory
(except the compiler's during compilation).
My intuition tells me these will be different sizes.
Unknown. FWIW, 'f' is not used anywhere, so it can be optimized away.
I tried with two
compilers, with the first, the object file size changed, but not the
executable file size. With the second, both files changed size.
Did you mean the executable file size? Object file size? Footprint
in memory at runtime?
My guess would be "all of the above".
[If you're curious, I have a bunch of these wrapped typedefs for
various STL container classes which I use to supply my own default
allocator. This in turn simplifies the client syntax significantly.
However, they're all stuck together in a single header file which
includes many of the STL container headers, even though any
particular user of the header may only need some of them.]
Now I'm curious. How does this simplify client syntax?
Using 'Foo<>::Type' instead of 'std::list<int>'? I doubt it. It
might just tickle the fancy of the younger programmer, who's barely
started with templates...
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask