Boost.Python:如何将工厂方法公开给python

时间:2014-12-12 02:48:26

标签: python c++ boost boost-python

我有一个内置在dll中的C ++ API,现在我想通过python使用api,所以我决定用boost.python重新构建dll,但我是boost.python的新手。

API位于文件 CMyApi.h 中,它有一个像这样的工厂方法:

class __declspec(dllexport) CMyApi
{
public:
    static CMyApi* CreateUserApi(const char *path = "");

    virtual void Init() = 0;

protected:
    ~CMyApi(){};
};

CMyApi是一个虚拟类,CApiImpl继承自CMyApi,它在 CApiImpl.h 中定义:

class CApiImpl : public CMyApi
{
public:
    CApiImpi();
    ~CApiImpi();
    virtual void Init();
};

CApiImpl.cpp 包含CApiImpl的实现以及CMyApi :: CreateUserApi的实现:

static CMyApi* CMyApi::CreateUserApi(const char *path)
{
    return new CApiImpl();
}

我不想将CApiImpl暴露给api用户,我希望CMyApi调用API,因此用户拥有CMyApi.h和DLL文件。

CMyApi包装如下:

class CMyApiWrapper : public CMyApi, public wrapper<CMApi>
{
    void Init()
    {
        this->get_override("Init")();
    }
};

BOOST_PYTHON_MODULE(CMyApiWrapper)
{
    class_<CMyApiWrapper>("CMyApiWrapper")
        .def("CreateUserApi", &CMyApi::CreateUserApi)
        .staticmethod("CreateUserApi")
        .def("Init", pure_virtual(&CMyApi::Init));
}

上面的BOOST_PYTHON_MODULE无法通过构建,我的程序出了什么问题?

0 个答案:

没有答案