在从事C++项目时,我一直在寻找第三方库,而不是我的核心业务.我发现了一个非常好的库,完全可以满足需要,但它是用Python编写的.我决定尝试使用Boost.Python库在C++中嵌入Python代码.
C++代码看起来像这样:
#include <string>
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int main(int, char **)
{
Py_Initialize();
try
{
object module((handle<>(borrowed(PyImport_AddModule("__main__")))));
object name_space = module.attr("__dict__");
object ignored = exec("from myModule import MyFunc\n"
"MyFunc(\"some_arg\")\n",
name_space);
std::string res = extract<std::string>(name_space["result"]);
}
catch (error_already_set)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(非常)简化版本的Python代码如下所示:
import thirdparty
def MyFunc(some_arg):
result = thirdparty.go()
print result
Run Code Online (Sandbox Code Playgroud)
现在的问题是:'MyFunc'执行正常,我可以看到'结果'的打印.我不能做的是从C++代码中读取'结果'.extract命令永远不会在任何命名空间中找到"结果".我尝试将'结果'定义为全局,我甚至尝试返回一个元组,但我无法让它工作.
我试图找到两个向量的集合差异,所以我做这样的事情:
std::vector<sha1_hash> first_vec, second_vec, difference_vec;
// populate first_vec and second_vec ...
std::sort(first_vec.begin(),first_vec.end());
std::sort(second_vec.begin(),second_vec.end());
std::set_difference(first_vec.begin(),first_vec.end(),
second_vec.begin(),second_vec.end(),
difference_vec.begin());
Run Code Online (Sandbox Code Playgroud)
当我在调试中运行它时,我得到以下运行时断言失败(在'vector'中):
_SCL_SECURE_VALIDATE_RANGE(_Myptr < ((_Myvec *)(this->_Getmycont()))->_Mylast);
Run Code Online (Sandbox Code Playgroud)
我正在使用VS 2008.关于什么可以触发这个的任何想法?