ブースト python を使用して、C++ アプリケーションに python を埋め込んでいます。
ブースト python 関数オブジェクトを呼び出し、グローバル名前空間をその関数呼び出しに関連付けられるようにしたいと考えています。具体的には、簡略化された関連コードは次のとおりです。
bp::object main = bp::import("__main__");
bp::object main_namespace = main.attr("__dict__");
//Put the function name runPyProg in the main_namespace
bp::object PyProg = exec(
"import cStringIO\n"
"import sys\n"
"sys.stderr = cStringIO.StringIO()\n"
"def runPyProg(exp):\n"
" print exp\n"
" exec(exp)\n"
" return\n"
"\n",main_namespace);
//Now call the python function runPyProg with an argument
bp::object py_fn = main.attr("runPyProg");
py_fn(expStr)
上記のように、boost python exec() 関数を使用すると、グローバル名前空間で送信できることがわかっています。私の質問は、py_fn を呼び出すときに main_namespace を python 関数に関連付ける方法です。最終的な目標は、runPyProg のローカル変数を main_namespace に配置することです。
ありがとうございました。