Поскольку вы используете std :: list, который никогда не делает недействительными итераторы, пока элемент остается в контейнере, вы можете использовать итератор для отслеживания вставляемых функций.Пример:
typedef std::list<CallbackFunction> func_list;
typedef typename func_list::iterator func_it;
func_it Insert(func_list & l, Callback c)
{
l.insert(l.begin(), c);
return l.begin();
}
Теперь вы можете вызвать эту функцию для вставки обратного вызова, и она вернет итератор, который вы можете использовать для ее удаления, например:
func_it it = Insert(l, c);
l.erase(it);