0

Python を C++ アプリケーションに埋め込んでいます。を使用して Python コードを実行する予定ですが、ローカルグローバルPyEval_EvalCodeを辞書として提供する代わりに、プログラムでシンボル参照を動的に解決する方法を探しています。

たとえば、Python コードが次の式で構成されているとします。

bear + lion * bunny

bearlionおよびbunnyそれらに関連するオブジェクトを に渡す辞書に配置する代わりにPyEval_EvalCode、Python インタープリターがプログラムをコールバックして、これらの名前付きオブジェクトを要求するようにします。

これを達成する方法はありますか?

4

2 に答える 2

1

おそらく。私はこれを試したことはありませんが、理論的には、メソッドをオーバーライドする小さな拡張クラスを C++ で実装できる可能性があります__getattr__(おそらく のtp_as_mappingまたはtp_getattro関数ポインターを介してPyTypeObject)。このインスタンスをローカルおよび/またはグローバルとして に渡すPyEval_EvalCodeと、C++ メソッドがライオン、トラ、クマを解決するように求められます。

于 2010-06-04T19:42:33.763 に答える
1

ローカル ディクショナリとグローバル ディクショナリを提供することで、評価されたコードが実行される環境が提供されます。これにより、C++ アプリで定義されたオブジェクトに名前をマップするためのインターフェイスが効果的に提供されます。

辞書を使いたくない理由を明確にできますか?

あなたができる別のことは、C++で文字列を処理し、コードを評価する前に文字列置換を行うことです....

于 2010-06-04T19:48:37.370 に答える