В настоящее время я ищу способ иметь постоянный указатель на объект внутри списка. По постоянному я имею в виду указатель, который всегда указывает на тот же объект, пока он существует.Получить постоянный указатель на объект в списке
Я не мог найти какой-либо простой способ сделать это, так что у кого-нибудь есть идея? Я уже использую boost, поэтому решение для повышения эффективности также очень приемлемо.
Чтобы пролить свет на то, что мне нужно, вот пример:
std::map<int, std::list<void (*)()> > handlerList; // I store some callback functions like this
void addHandler(int id, void (*handlerFunc)()) {
handlerList[id].push_back(handlerFunc); // 100% intended behavior (I know that the []-operator creates a object if it doesn't exist)
}
То, что я хотел бы иметь что-то вроде этого:
some_permanent_pointer_type addHandler(int id, void (*handlerFunc)()) {
return handlerList[id].push_back(handlerFunc);
}
А потом в какой-то другой точке :
some_permanent_pointer_type handlerPointer;
handlerPointer = addHandler(123, someFunc);
// Other point of code
handlerPointer.delete(); // or
ListType.delete(handlerPointer); // Or something like this
У вас есть идеи? Написание собственного класса не было бы такой сделкой. Но я понятия не имею, как это реализовать. Но я предпочел бы что-то уже существующее. Время и прочее.
Примечание: этот код будет работать на Linux-машине.
Вы не можете сделать это, потому что список изменчиво. Если список изменится, местоположение в памяти его объектов может измениться. Вы уже можете найти список обработчиков по id, чтобы вы могли получить его, когда вам это нужно. Всякий раз, когда я вижу такой вопрос, я считаю, что лучше всего сделать шаг назад и спросить, что вы пытаетесь сделать, потому что ответ не идет по этому пути. – mbgda
Вы ищете [делегаты?] (Http://msdn.microsoft.com/en-us/library/hh755798.aspx) –
@FelixCastor - это C++/CX, который отличается от обычного C++. – Borgleader