Я хранящийся std::function
, которые являются результатами std::bind
в списке:Заменить значение вызова для одной станда :: функции
typedef std::pair<int, std::function<void(HDC)>> myPair;
std::list<myPair> *paintJobs;
paintJobs = new std::list<myPair>();
Я потом добавить что-то вроде этого:
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));
В моем метод краски. Я просматриваю список и вызываю все функции, добавил я. Эта часть работает хорошо.
Но теперь, я хочу обменять, например, цвет (R, G и 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
}
}
}
Моя другая идея была, чтобы вставить новую запись и копирование старых значений, но есть Другая проблема: получение связанных значений.
Итак, как я могу заменить связанные значения параметров или получить значения других?
[OT]: 'std :: list * paintJobs;' ...uneeded pointer, 'std :: list paintJobs;' возможно, что вы хотите. –
Jarod42
Это немного сложнее в встроенном классе, поэтому указатель –
Если вы хотите изменить «участников», тогда вы должны создать функтор и предоставить им доступ. Затем вы можете сохранить этот функтор вместо 'std :: function'. – NathanOliver