int main() { upperPair pair1(123, namePair("aaaaa", "xxxxxxx")); upperPair pair2(345, namePair("bbb", "yyy")); cout << "no\tfirst name\tlast name\n"; printUpperPair(pair1); printUpperPair(pair2); }
void* ClassCastProvider:: cast_to_base_class(void* pDerivVoid, const ClassNameNode*& node, const std::string& baseName) { // find way to base class std::vector<size_t> vWay; if(!ClassNameTreeWay(vWay, *node, baseName)) { UG_ERR_LOG("ERROR in ClassCastProvider::cast_to_base_class: Request" " to cast from derived class '"<< node->name()<<"' to " " base class '"<<baseName<<"', but no such base class in" " registered class hierarchy."); throw new UGError_ClassCastFailed(node->name(), baseName); } void* currPtr = pDerivVoid; const ClassNameNode* pCurrNode = node; // cast all the way down while(!vWay.empty()) { // get base class to cast to const ClassNameNode* pBaseClassNode = &pCurrNode->base_class(vWay.back()); // get name pair std::pair<const ClassNameNode*, const ClassNameNode*> namePair(pBaseClassNode, pCurrNode); // find in map std::map<std::pair<const ClassNameNode*, const ClassNameNode*>, CastFunc>::iterator it; it = m_mmCast.find(namePair); if(it == m_mmCast.end()) { UG_ERR_LOG("ERROR in ClassCastProvider::cast_to_base_class:" " Request intermediate cast from derived class '" << pCurrNode->name() <<"' to direct base class '" <<pBaseClassNode->name()<<"', but no such cast " " function registered."); throw new UGError_ClassCastFailed(node->name(), baseName); } // get cast function CastFunc pCastFunc = it->second; // cast currPtr = (*pCastFunc)(currPtr); // set node to base class pCurrNode = pBaseClassNode; // pop way vWay.pop_back(); } // write current node on exit node = pCurrNode; // return current pointer return currPtr; }