unsorted_map< P, CValue, P::hash, P::equal_to> * pmap = new unsorted_map< A, CValue, A::hash, A::equal_to>;
Тип P
отличается от типа A
.
То есть X<P>
отличается от X<A>
. Это означает, что этот код
X<P> *pX = new X<A>();
не будет компилироваться, даже если A
получено из P
. GCC выдаст эту ошибку ( ideone ):
error: cannot convert ‘X<A>*’ to ‘X<P>*’ in initialization
, что самоочевидно, если вы знаете, что X<A>
- это совершенно другой тип, чем X<P>
Обратите внимание, что это A
, которое получено из P
. Но X<A>
все еще НЕ является производным от X<P>
. Я думаю, что вы путаете последнее с первым.
Так что я думаю, что вам нужно это:
unorder_map<P*, P::hash, P::equal_to> objectMap;
Вы можете вставить объект типа A*
в эту карту:
objectMap.insert(new A());
Вы также можете вставить объект типа B*
:
objectMap.insert(new B());
В конце концов, вы хотите обрабатывать все объекты на карте полиморфно.