小编yoa*_*ram的帖子

嵌入在CPP中的Python:如何将数据恢复到CPP

在从事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命令永远不会在任何命名空间中找到"结果".我尝试将'结果'定义为全局,我甚至尝试返回一个元组,但我无法让它工作.

c++ python boost-python

13
推荐指数
1
解决办法
7567
查看次数

std:vector中的断言错误用于std :: set_difference

我试图找到两个向量的集合差异,所以我做这样的事情:

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.关于什么可以触发这个的任何想法?

c++ stl visual-studio-2008

0
推荐指数
1
解决办法
1301
查看次数

标签 统计

c++ ×2

boost-python ×1

python ×1

stl ×1

visual-studio-2008 ×1