On Mon, 28 Apr 2008 16:05:53 CST, Rob wrote:
> /*** ATTEMPT TWO **/
> void create(std::vector<Base*>& arr)
> {
> ...
> }
>
> int main()
> {
> std::vector<Derived*> arr;
> create( arr );
> }
It isn't type safe. Imagine if the langauge did allow you to do this. What
if create was implemented like:
void create(std::vector<Base*>& arr)
{
arr.push_back(new Base());
}
Then since arr was passed by reference, the vector<Derived*> arr in main
would contain an object of type Base, when it's type says it only contains
objects of derived! Main could access an object of type base, and call a
Derived specific member function on it, and then you have undefined
behavior.
That would break type safty, and since the whole point of templates is
type
safty, it would destroy the purpose of templates.
If you want to pass in a vector of Derived objects to a function that
takes
Base objects, make a vector<Base*> and just populate it with Derived.
Derived objects are Base, but not the other way around.
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|