使用C ++扩展Python:boost vs native

时间:2014-11-17 16:31:32

标签: python c++

我需要从python中创建一个现有的C ++类,所以我一直在探索使用Boost.Python与python直接提供的本机功能。我编写了Boost tutorial的第一个非平凡的例子:

struct World 
{
    World(std::string s) : msg(s) { }

    void set(std::string m) { msg = m; }
    std::string greet() { return msg; }

    std::string msg;
};

通过我编码为的原生扩展名的等价物:

typedef struct {
    PyObject_HEAD
    std::string* msg;
} World;
例如,

greet()set()实现为:

static PyObject* World_greet(World* self)
{
    return Py_BuildValue("s", self->msg->c_str());
}

static PyObject* World_set(World* self, PyObject* args)
{
    const char* msg = NULL;

    if (PyArg_ParseTuple(args, "s", &msg)) {
        self->msg->assign(msg);
        Py_RETURN_NONE;
    }
    else {
        return NULL;
    }
}

这是使用World实施PyObject的正确方法吗?是否有更好的选择... msg应该是std::stringPyObject*还是PyStringObject*而不是std::string*?如果它应该是其中之一 - 为什么以及World_greet()World_set()与不同类型的内容会是什么样的?

0 个答案:

没有答案