--- trunk/OOPSE/libmdtools/CallbackFunctor.cpp 2004/06/03 21:51:55 1232 +++ trunk/OOPSE/libmdtools/CallbackFunctor.cpp 2004/06/04 03:15:31 1234 @@ -4,9 +4,9 @@ CallbackFunctor:: CallbackFunctor(SimInfo* rhs) : info #include "ConstraintPair.hpp" CallbackFunctor:: CallbackFunctor(SimInfo* rhs) : info(rhs){ - registerFunction(KeyType(typeid(ConstraintElement), typeid(ConstraintElement)), &CallbackFunctor::constrainAtomAtom); - registerFunction(KeyType(typeid(ConstraintElement), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainAtomRigidBody); - registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintElement)), &CallbackFunctor::constrainRigidBodyAtom); + registerFunction(KeyType(typeid(ConstraintAtom), typeid(ConstraintAtom)), &CallbackFunctor::constrainAtomAtom); + registerFunction(KeyType(typeid(ConstraintAtom), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainAtomRigidBody); + registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintAtom)), &CallbackFunctor::constrainRigidBodyAtom); registerFunction(KeyType(typeid(ConstraintRigidBody), typeid(ConstraintRigidBody)), &CallbackFunctor::constrainRigidBodyRigidBody); } void CallbackFunctor::registerFunction(const KeyType& key, MappedType f){ @@ -17,7 +17,8 @@ int CallbackFunctor::operator()(ConstraintPair* consPa DoubleDispatchMap::iterator foundResult; curPair = consPair; - foundResult = ddMap.find(KeyType(typeid(consPair->firstElem), typeid(consPair->secondElem))); + //typeid must operate on reference, otherwise it return the type_info of base class + foundResult = ddMap.find(KeyType(typeid(*(consPair->firstElem)), typeid(*(consPair->secondElem)))); if(foundResult != ddMap.end()){ return (this->*(foundResult->second))(consPair->firstElem, consPair->secondElem);