STL und _com_ptr_t
-
Hallo,
kann mir jemand sagen, wie _com_ptr_t zusammen mit der STL verwendet werden können?
_com_ptr_t kapseln als Smartpointer ja immer ein Interface.
Ich habe bisher noch nicht heraus gefunden, wie man diese zusammen mit der STL verwenden kann bzw. was dabei zu beachten ist.
Konkret, funktioniert das einfügen von _com_ptr_t z.B. nicht bei set's (da diese wohl nicht richtig einsortiert werden können).
Auch habe ich noch nirgends ein brauchbares Beispiel z.B. für set_intersection(...) gefunden, bei welchem aus zwei Mengen die Objekte herausgefiltert werden, welche die gleichen Interfaces haben.Kann mir jemand einen Tipp geben bzw. einen Link schicken, wo ich dazu Infos finde?
Danke!
-
Ich kenne zwar
_com_ptr_tnicht, aber falls dessen Schnittstelle ungeeignet für STL-Container ist, kannst du ja einen Wrapper darum herum schreiben. Damit kannst du auch Operatoren anbieten, um Sortierung instd::sets zu ermöglichen. Oder du schreibst dir einfach einen Funktor, der Elemente richtig ordnet, und verwendest ihn mitstd::set.Zur C++-Standardbibliothek findest du auf www.cppreference.com Informationen, es liegt an dir, sie mit
_com_ptr_tzu kombinieren.
-
Nexus schrieb:
Ich kenne zwar
_com_ptr_tnicht, aber falls dessen Schnittstelle ungeeignet für STL-Container ist, kannst du ja einen Wrapper darum herum schreiben. Damit kannst du auch Operatoren anbieten, um Sortierung instd::sets zu ermöglichen. Oder du schreibst dir einfach einen Funktor, der Elemente richtig ordnet, und verwendest ihn mitstd::set.Zur C++-Standardbibliothek findest du auf www.cppreference.com Informationen, es liegt an dir, sie mit
_com_ptr_tzu kombinieren.Danke für die Antwort Nexus, aber so richtig weitergebracht hat mich es noch nicht: ich suche nach Beispielen, wo gezeigt wird, wie man z.B. die von dir vorgeschlagenen Techniken in Verbindung mit den Smartpointern (wie _com_ptr_t) einsetzt.
Aber trotzdem danke nochmal!
-
An Smart-Pointern ist nichts speziell. Für die STL ist der Typ der Elemente weitgehend irrelevant. Einige Algorithmen und Datenstrukturen setzen zwar gewisse Operationen voraus, aber das betrifft vor allem Kopierkonstruktor, Zuweisungsoperator,
operator<,operator==etc. und nichts Smart-Pointer-Spezifisches.Du schaust dir also lieber die STL selbst an. Wenn du verstehst, wie sie zu verwenden ist, kannst du sie auch mit deinem
_com_ptr_tkombinieren.
-
COM arbeitet doch mit Referenzzählern. Dann wird dieser com_ptr wahrscheinlich ähnlich wie shared_ptr funktionieren. Wenn ja, dann ist das Ding normal kopier- und zuweisbar. Das ist auch schon alles, was die STL Container mit ihren Elementen machen wollen...
-
krümelkacker schrieb:
COM arbeitet doch mit Referenzzählern. Dann wird dieser com_ptr wahrscheinlich ähnlich wie shared_ptr funktionieren. Wenn ja, dann ist das Ding normal kopier- und zuweisbar. Das ist auch schon alles, was die STL Container mit ihren Elementen machen wollen...
Neben der Kopier- und Zuweisbarkeit sollten die Objekte aber auch noch sortierbar sein: Wenn man z.B. std::set_intersection auf zwei vector-Container anwenden möchte, dann müssen diese vorher sortiert werden.
Das Gleiche gilt beim Verwenden/Einfügen in set-Container bzw. für die Key-Elemente in Maps.
Ich bin noch nicht genau dahinter gestiegen, wie das Ganze funktioniert, aber zu diesem Zweck wurde wohl die Klasse CAdapt eingführt.
Siehe z.B.:
http://msdn.microsoft.com/de-de/library/vstudio/bs6acf5x%28v=vs.90%29.aspx
oder auch
http://stackoverflow.com/questions/2719741/advice-when-using-com-object-ccomptr-and-the-stl
-
Perdone schrieb:
Neben der Kopier- und Zuweisbarkeit sollten die Objekte aber auch noch sortierbar sein: Wenn man z.B. std::set_intersection auf zwei vector-Container anwenden möchte, dann müssen diese vorher sortiert werden.
Das Gleiche gilt beim Verwenden/Einfügen in set-Container bzw. für die Key-Elemente in Maps.Das ist aber schon sehr speziell. Viele vector-Nutzer brauchen das nicht. Und die, die es brauchen, haben natürlicherweise auch irgendeine Art von Sortierkriterium, denn sonst machen diese Aktionen logisch keinen Sinn.