Boost MultiIndex - Objekte oder Zeiger (und wie benutzt man Sie?)?

Bin ich die Programmierung eines Agenten-basierten simulation und haben entschieden, dass die Erhöhung der MultiIndex ist wahrscheinlich der effizienteste container für meine Erfüllungsgehilfen. Ich bin kein professioneller Programmierer, und mein hintergrund ist sehr fleckig. Ich habe zwei Fragen:

  1. Ist es besser, die Behälter enthalten die Wirkstoffe (Klasse Host) selbst, oder ist es effizienter für den Behälter zu halten Host *? Hosts wird manchmal aus dem Speicher gelöscht (das ist mein plan, anyway... Lesen müssen, bis auf new und delete). Der Gastgeber private Variablen erhalten gelegentlich aktualisiert, die ich hoffe, durch die modify Funktion in MultiIndex. Gibt es keine anderen Kopien der Gastgeber in der simulation, d.h., Sie werden nicht in andere Behälter.
  2. Wenn ich den Zeiger verwenden, um Hosts, wie richte ich den Schlüssel Extraktion richtig? Meine folgende code kann nicht kompiliert werden.
//main.cpp - ATTEMPTED POINTER VERSION
...
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/tokenizer.hpp>

typedef multi_index_container<
  Host *,
  indexed_by< 
    //hash by Host::id
    hashed_unique< BOOST_MULTI_INDEX_MEM_FUN(Host,int,Host::getID) > //arg errors here
    > //end indexed_by
  > HostContainer;

...
int main() {

   ...
   HostContainer testHosts;
   Host * newHostPtr;
   newHostPtr = new Host( t, DOB, idCtr, 0, currentEvents );
   testHosts.insert( newHostPtr );
   ... 
}

Kann ich nicht finden, genau Analog dem Beispiel in der Boost Dokumentation, und meine Kenntnisse in C++ - syntax ist noch sehr schwach. Der code scheint zu funktionieren, wenn ich alle ersetzen der Zeiger verweist, mit der die Objekte der Klasse selbst.


So, wie ich es Lesen kann, der Boost Dokumentation (siehe übersichtstabelle unten) setzt Voraus, dass ich sollte in der Lage sein zu verwenden member-Funktionen mit Zeiger-Elemente.

InformationsquelleAutor Sarah | 2010-04-15
Schreibe einen Kommentar