Вы не говорите конкретно, какой API / dll вы пытаетесь использовать, но большинство из них предоставляют void *
(или LPVOID
в окнах) «пользовательских данных», которые предоставляются вместе с обратным вызовом.указатель на функцию и будет передан в функцию обратного вызова вместе с любыми другими аргументами, подходящими для обратного вызова.
Что вы можете сделать, это передать указатель на ваш AST в качестве этого дополнительного указателя и написать небольшую оболочкуфункция для фактического обратного вызова, которая преобразует этот void *
обратно в AST *
, а затем вызывает вашего интерпретатора в этом AST.