Я пытался реализовать C # -подобную систему событий в C ++ с помощью шаблонов функций tr1, используемых для хранения функции, которая обрабатывает событие.
Я создал вектор, чтобы к этому событию можно было подключить несколько слушателей, т. Е .:
vector< function<void (int)> > listenerList;
Я бы хотел иметь возможность удалить обработчик из списка, чтобы слушатель не получал события.
Итак, как мне найти запись в этом списке, которая соответствует данному слушателю? Могу ли я проверить, относится ли объект «функция» в списке к определенной функции?
Спасибо!
РЕДАКТИРОВАТЬ: Изучив подход boost :: signal, кажется, что он, вероятно, реализован с использованием системы токенов, как некоторые из вас предлагали Вот некоторая информация об этом . Наблюдатель сохраняет объект «Соединение», когда он присоединяется к событию, и этот объект соединения используется для отключения при необходимости. Таким образом, похоже, используете ли вы Boost или катите свой собственный с tr1, основной принцип тот же. то есть это будет немного неуклюже :)