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

2024-10-04 03:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++ API,它被构建到一个DLL中,现在我想通过Python来访问API,所以我决定重新构建DLL。boost.python,但我是新手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中定义:

^{pr2}$

CApiImpl.cpp文件包含CApiImpl的实现和CMyApi::CreateUserApi的实现:

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

我不想向api用户公开CApiImpl,我希望api由CMyApi调用,所以用户拥有的是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));
}

我的PYTHON模块不能在上面构建错误的程序?在


Tags: 文件pathapiinitstaticpublicclassdll