I std::function
gespeichert haben, die Ergebnisse von std::bind
, in einer Liste sind:ersetzen Aufruf Werte für std :: function
typedef std::pair<int, std::function<void(HDC)>> myPair;
std::list<myPair> *paintJobs;
paintJobs = new std::list<myPair>();
ich dann füge ich etwas wie folgt aus:
int id = 1;
int x = 0;
int y = 0;
int width = 100;
int height = 100;
int r = 255;
int g = 0;
int b = 0;
std::function<void(HDC)> func = std::bind(&Window::drawRect, this, std::placeholders::_1, x, y, width, height, r, g, b);
paintJobs->push_back(std::make_pair(id, func));
In meinem Malmethode Ich gehe durch die Liste und rufe alle Funktionen auf, die ich hinzugefügt habe. Dieser Teil funktioniert gut.
Aber jetzt, ich möchte zum Beispiel die Farbe wechseln (die r, g und b):
void changeColor(int id, int r, int g, int b) {
for(auto elem = paintJobs->begin(); elem != paintJobs->end(); ++elem) {
if(elem->first == id){
//change the 6th, 7th and 8th parameter of elem->second
}
}
}
Meine andere Idee, einen neuen Eintrag einzufügen war und das Kopieren der alten Werte, aber es ist die anderes Problem: Erhalten der gebundenen Werte.
Also wie kann ich die gebundenen Werte der Parameter ersetzen oder die Werte der anderen erhalten?
[OT]: 'Std :: Liste * PaintJobs;' ...Unbezahlter Zeiger, 'std :: list paintJobs;' ist wahrscheinlich, was Sie wollen. –
Jarod42
Es ist ein bisschen komplizierter in einer eingebetteten Klasse, also der Zeiger –
Wenn Sie die "Mitglieder" ändern wollen, dann sollten Sie einen Funktor erstellen und Zugriff darauf gewähren. Dann können Sie diesen Funktor anstelle einer 'std :: function' speichern. – NathanOliver