相关疑难解决方法(0)

如何在Python中实现C++类,由C++调用?

我有一个用C++编写的类接口.我有一些实现此接口的类也是用C++编写的.这些是在更大的C++程序的上下文中调用的,它基本上实现了"main".我希望能够在Python中编写这个接口的实现,并允许它们在更大的C++程序的上下文中使用,就好像它们只是用C++编写的一样.

有很多关于连接python和C++的文章,但我无法弄清楚如何做我想要的.我能找到的最近的是:http://www.cs.brown.edu/~jwicks/boost/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_virtual_functions,但这不是没错.

更具体地说,假设我有一个现有的C++接口定义如下:

// myif.h
class myif {
   public:
     virtual float myfunc(float a);
};
Run Code Online (Sandbox Code Playgroud)

我想要做的是:

// mycl.py
... some magic python stuff ...
class MyCl(myif):
  def myfunc(a):
    return a*2
Run Code Online (Sandbox Code Playgroud)

然后,回到我的C++代码中,我希望能够说出类似的话:

// mymain.cc
void main(...) {
  ... some magic c++ stuff ...
  myif c = MyCl();  // get the python class
  cout << c.myfunc(5) << endl;  // should print 10
}
Run Code Online (Sandbox Code Playgroud)

我希望这很清楚;)

c++ python swig boost-python

37
推荐指数
4
解决办法
9001
查看次数

c ++后端使用swig包装器调用python级别定义的回调

我正在将一个用C++编写的库包装到Python API libwebqq中

有一种在boost函数中定义的类型.

typedef boost::function<void (std::string)> EventListener;
Run Code Online (Sandbox Code Playgroud)

Python级别可以定义"EventListener"变量回调.

C++级别中还有一个映射结构,它是类Adapter中的event_map.event_map的关键类型是QQEvent枚举类型,event_map的值类型是包含EvenListener的类"Action".

class Action
{

    EventListener _callback;

    public:
    Action (){
        n_actions++;
    }

    Action(const EventListener & cb ){
    setCallback(cb);
    }

    virtual void operator()(std::string data) {
    _callback(data);
    }
    void setCallback(const EventListener & cb){
        _callback = cb;
    }

    virtual ~Action(){ std::cout<<"Destruct Action"<<std::endl; n_actions --; }
    static int n_actions;
};


class Adapter{

    std::map<QQEvent, Action > event_map;

public:
    Adapter();
    ~Adapter();
    void trigger( const QQEvent &event, const std::string data);
    void register_event_handler(QQEvent event, EventListener callback);
    bool is_event_registered(const QQEvent & …
Run Code Online (Sandbox Code Playgroud)

c++ python swig

8
推荐指数
1
解决办法
2342
查看次数

标签 统计

c++ ×2

python ×2

swig ×2

boost-python ×1