0

我将 Python 嵌入到 C++ 应用程序中。我打算用它PyEval_EvalCode来执行 Python 代码,但我没有提供本地全局作为字典,而是在寻找一种让我的程序动态解析符号引用的方法。

例如,假设我的 Python 代码包含以下表达式:

bear + lion * bunny

我希望 Python 解释器回调我的程序并请求这些命名对象,而不是将bear,lionbunny它们的关联对象放入我传递给的字典中。PyEval_EvalCode

有没有办法做到这一点?

4

2 回答 2

1

可能。我从来没有尝试过,但理论上你可以在 C++ 中实现一个小的扩展类来覆盖该__getattr__方法(可能通过 的tp_as_mappingortp_getattro函数指针PyTypeObject)。将此实例作为局部变量和/或全局变量传递给PyEval_EvalCode,然后您的 C++ 方法应该被要求为您解析狮子、老虎和熊。

于 2010-06-04T19:42:33.763 回答
1

通过提供 locals 和 globals 字典,您提供了执行评估代码的环境。这有效地为您提供了将名称映射到 C++ 应用程序中定义的对象的接口。

你能解释一下为什么你不想使用字典吗?

您可以做的另一件事是在 C++ 中处理字符串并在评估代码之前进行字符串替换......

于 2010-06-04T19:48:37.370 回答