2016-07-29 8 views
1

Ich verwende eine Bibliothek, die eine Funktion foo(Widget*) bietet.Wrapping std :: map und Zeiger auf Element

sind My Widgets in

gespeichert
struct WidgetManager { 

    std::map<int, Widget> dict; 

    ??? getWidget(int id); 

} 

Ursprünglich I (raw) Widget Zeiger in der gespeicherten std::map nur weil es bequem war, sie passieren foo. Wenn ich die tatsächlichen Widgets in der Karte speichern möchte, was sollte der Rückgabetyp von getWidget sein, damit ich einen Zeiger des Widgets an foo übergeben kann?

Ich bin gezwungen, es vom Typ Iterator zu machen, aber ich mag es nicht, dass ich auf itr->second zugreifen muss, um das Widget (Zeiger) zu erhalten.

Antwort

2

Sie können & verwenden, kurz bevor Sie Ihr Widget an die foo(Widget*)-Funktion übergeben, um einen Zeiger darauf zu erhalten.

struct WidgetManager { 
    std::map<int, Widget> dict; 
    Widget& getWidget(int id); 
} 

Nutzung

WidgetManager wm; 
//... 
Widget& w = wm.getWidget(id); 
foo(&w); 
//...