Контекст Я хочу вызвать обратный вызов Tcl через SWIG из C/C++. Что еще более важно, я хочу, чтобы это было закрытием.Tcl обратный вызов из C/C++ с помощью SWIG
Предварительные знания http://computer-programming-forum.com/57-tcl/4481cebe0f09966d.htm (нет это не меня, только единственное, что, казалось, достаточно похожи, в поиске Google)
С Python, я создаю объект на стороне Python, дать ему __call__
, запустите его через SWIG как PyObject *, и он все еще имеет доступ к нелокальным переменным, закодированным в Python (с небольшим количеством кода клейма), потому что он все еще тесно связан с интерпретатором, в котором он был создан.
Мое понимание (исправьте меня здесь) В Tcl единственный способ, которым я вызываю функцию из C, - через новый интерпретатор, передавая строку, представляющую команду (но ... тогда где закрытие ...?). Если я вызываю C/C++ из Tcl, все равно имею ту же проблему, потому что C/C++ не знает о вызывающем Tcl-интерпретаторе.
Annnnddd ... документация (http://www.tcl.tk/man/tcl8.6/TclLib/contents.htm), в то время как обширная, ... очень обширная. Коллективные знания, пожалуйста, спаси меня от моего невежества.
Вопрос Как получить замыкание/изменить, какое значение имеет имя в Tcl, указывающее на C/C++? Или даже просто получить дескриптор интерпретатора, который звонит в код C/C++ ...?
Я пытаюсь понять, к какому шаблону вызовов вы пытаетесь. Вы хотите создать команду Tcl, которая вызовет какое-то закрытие на стороне C++ при вызове? –
И Tcl не делает замыканий (и неудобно исправлять из-за природы значений в Tcl, язык на самом деле использует неизменяемые ссылки). Он выполняет сопрограммы и классы в 8.6, но они _named_ сущностей; подлинные ценности не могут работать таким образом. –
На первый комментарий: да. Второй комментарий, h'okay, редактирование/вопрос. – user