История изменений
Исправление utf8nowhere, (текущая версия) :
Каждый раз когда тебе нужен новый сишный колбэк для метода класса, а поддержки указателя на пользовательские данные в либе нет:
1. Выделяешь mmap-ом кусок памяти с разрешением исполнять код.
2. Записываешь туда машкод вызова метода класса. Адрес метода и указатель на объект класса прописываешь в машкоде.
3. Передаёшь указатель на начало машкода как адрес функции.
Можешь модифицировать шаг 2 под лямбду, наворотить какой-нибудь менеджер памяти с подсчётом ссылок, чтобы на каждый колбэк по странице mmap-ом не выделять и т.д. и т.п.
Исходная версия utf8nowhere, :
Каждый раз когда тебе нужен новый колбэк для метода класса:
1. Выделяешь mmap-ом кусок памяти с разрешением исполнять код.
2. Записываешь туда машкод вызова метода класса. Адрес метода и указатель на объект класса прописываешь в машкоде.
3. Передаёшь указатель на начало машкода как адрес функции.
Можешь модифицировать шаг 2 под лямбду, наворотить какой-нибудь менеджер памяти с подсчётом ссылок, чтобы на каждый колбэк по странице mmap-ом не выделять и т.д. и т.п.