Anycorn
Anycorn

Reputation: 51475

C++ collection of abstract base classes

how can I create STL collection of classes which implement abstract base class using the base class as collection value, without using pointers?

is there something in Boost that allows me to implement it? The collection specifically is map.

Thanks

Upvotes: 0

Views: 560

Answers (3)

246tNt
246tNt

Reputation: 2170

You can't

Think about how the compiler would generate code to do that ? No pointers means that the storage has to be allocated "in the collection itself" in a static array or something. But the storage required for the subclasses can change ! So how would the compiler do it ? ... it can't ...

Upvotes: 0

hrnt
hrnt

Reputation: 10142

You cannot avoid pointers completely. You must store pointers in the collection if you want to avoid Object slicing. Boost has a container that hides the pointers pretty well: ptr_map

Upvotes: 4

Jonathan Graehl
Jonathan Graehl

Reputation: 9301

The Boost Pointer Container Library does what you want.

Upvotes: 1

Related Questions