Funktion für boost::ptr_unordered_multimap und boost::unordered_multimap
-
Hallo,
ich habe eine Art Suchfunktion mit bestimmten Ausschlusskriterien für eine multimap geschrieben.
Nun stehe ich vor dem Problem, dass ich an einer Stelle einen Pointer Container übergebe und an der anderen einen normalen, der eine Teilmenge davon enthält.
Der Code der Suchfunktion sieht in etwa so aus:Object* Parser::searchObjectInCustomList(const SpecificObjectList &objectList, const std::string &identifier, Parser::SearchMode searchMode, const Object *object) { if (objectList.size() == 0) return 0; boost::iterator_range<SpecificObjectList::iterator> range = objectList.equal_range(identifier); if (range.empty()) return 0; Object *resultObject = 0; bool checkContainer = false; bool checkScope = false; bool checkLibrary = false; if ((object != 0 && object->container() != 0) || searchMode & CheckContainer) checkContainer = true; if ((object != 0 && object->scope() != 0) || searchMode & CheckScope) checkScope = true; if ((object != 0 && object->library() != 0) || searchMode & checkLibrary) checkLibrary = true; ... typedef boost::ptr_unordered_multimap<std::string, Object> ObjectList; typedef boost::unordered_multimap<std::string, Object*> SpecificObjectList;Ich möchte die Funktion praktisch auch auf ein Objekt des Typs ObjectList anwenden können. Kann ich irgendwie eine boost::ptr_unordered_multimap-Instanz effizient zu einer boost::unordered_multimap-Instanz umwandeln?
-
Warum kein Funktionstemplate verwenden, das mit
ObjectListundSpecificObjectListklarkommt?
-
Das war mein erster Ansatz, aber ich wollte wissen ob es einfacher geht. Zudem hatte ich irgendeinen Fehler bei:
boost::iterator_range<IteratorType> range = objectList.equal_range(identifier);wenn IteratorType "boost::ptr_map_iterator" war.
-
Der Fehler kam, weil ich eine konstante Referenz verwendet habe. Leider wurde die Ausgabe etwas zugemüllt und deshalb ist es mir erst spät aufgefallen.
Ich löse es jetzt über die Templatefunktion.