日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python包裹 函数_什么是最干净的方法调用一个Python函数从C++与一个Sigg包裹的Obj....

發布時間:2024/9/27 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python包裹 函数_什么是最干净的方法调用一个Python函数从C++与一个Sigg包裹的Obj.... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面是我解決這個問題的工作方案。它使用了上述“無所不能”和“柔印”的建議。

特別是,我們用SWIG director創建一個回調類,然后在Python中從中派生出所需的回調功能,而不引入循環依賴項。

此外,我們還提供了一個接口,允許任何可調用的Python對象充當回調函數。我們通過在SWIG中使用“pythonprend”指令為“setCallback”函數添加一些代碼來實現這一點。這段代碼只是檢查一個可調用的對象,如果它找到了一個對象,則將其包裝在回調的實例中。

最后,我們處理與C++類(ObjutPyCalBub)引用相關的內存問題,即引用對象(即回調子類)。

文件example.py:import cb

class CB(cb.Callback):

def __init__(self):

super(CB, self).__init__()

def call(self, x):

print("Hello from CB!")

print(x)

def foo(x):

print("Hello from foo!")

print(x)

class Bar:

def __call__(self, x):

print("Hello from Bar!")

print(x)

o = cb.ObjWithPyCallback()

mycb=CB()

o.setCallback(mycb)

o.call()

o.setCallback(foo)

o.call()

o.setCallback(Bar())

o.call()

文件ObjWithPyCallback.i:%module(directors="1") cb

%{

#include "Callback.h"

#include "ObjWithPyCallback.h"

%}

%feature("director") Callback;

%feature("nodirector") ObjWithPyCallback;

%feature("pythonprepend") ObjWithPyCallback::setCallback(Callback&) %{

if len(args) == 1 and (not isinstance(args[0], Callback) and callable(args[0])):

class CallableWrapper(Callback):

def __init__(self, f):

super(CallableWrapper, self).__init__()

self.f_ = f

def call(self, obj):

self.f_(obj)

args = tuple([CallableWrapper(args[0])])

args[0].__disown__()

elif len(args) == 1 and isinstance(args[0], Callback):

args[0].__disown__()

%}

%include "Callback.h"

%include "ObjWithPyCallback.h"

文件回調.h:#ifndef CALLBACK_H

#define CALLBACK_H

class ObjWithPyCallback;

class Callback

{

public:

Callback(){}

virtual ~Callback(){}

virtual void call(ObjWithPyCallback& object){}

};

#endif

文件ObjWithPyCallback.h:#ifndef OBJWITHPYCALLBACK_H

#define OBJWITHPYCALLBACK_H

class Callback;

class ObjWithPyCallback

{

public:

ObjWithPyCallback();

~ObjWithPyCallback();

void setCallback(Callback &callback);

void call();

private:

Callback* callback_;

};

#endif

文件ObjWithPyCallback.cpp:#include "ObjWithPyCallback.h"

#include "Callback.h"

#include

ObjWithPyCallback::ObjWithPyCallback() : callback_(NULL) {}

ObjWithPyCallback::~ObjWithPyCallback()

{

}

void ObjWithPyCallback::setCallback(Callback &callback)

{

callback_ = &callback;

}

void ObjWithPyCallback::call()

{

if ( ! callback_ )

{

std::cerr << "No callback is set.\n";

}

else

{

callback_->call(*this);

}

}

總結

以上是生活随笔為你收集整理的python包裹 函数_什么是最干净的方法调用一个Python函数从C++与一个Sigg包裹的Obj....的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄色大片免费观看 | 色女人网站 | 国产天堂在线 | 99热一区二区三区 | 色婷婷小说 | 欧美久久久久久久久久久久久久 | 亚洲成人v | 影音先锋在线视频 | www.xxx国产| 毛片毛多水多 | www.白丝| 久久影院精品 | 95久久| 精品一区二三区 | 欧美激情视频在线播放 | 欧美日韩在线一区二区 | av一区不卡| 一区二区免费在线播放 | 天天爱天天射 | 中文字幕在线网站 | 5a毛片| 免费看国产视频 | 婷婷干| 九九热精品在线观看 | 在线看91 | 51ⅴ精品国产91久久久久久 | 高清国产在线观看 | 国产激情精品一区二区三区 | 夜夜激情网 | 亚洲涩涩爱 | www黄色在线观看 | 啪网址 | 极品福利视频 | 精品亚洲一区二区三区四区五区 | 91在线播| 亚洲第一黄网 | 光明影院手机版在线观看免费 | 超碰2019| 亚洲色成人www永久在线观看 | 欧美.www | 初音未来打屁股 | a√天堂网 | 国产精品第6页 | 人人草在线 | 久久丝袜视频 | 在线视频观看 | 国产精品久久久久毛片软件 | 亚洲桃色av| 91美女福利视频 | 天堂视频在线 | v天堂中文在线 | ,亚洲人成毛片在线播放 | 免费在线你懂的 | 久久久久久久艹 | 久久午夜激情 | 日韩aⅴ片 | 亚洲熟妇无码久久精品 | 97超碰碰 | 老女人一毛片 | 91禁在线动漫 | 麻豆免费av| 草逼视频免费看 | 欧美日韩一区二区综合 | 最新av免费| 欧美日韩国产中文字幕 | 国产又黄又粗又长 | 中出在线播放 | 国产精品久久久久久一区二区 | 99热在线免费观看 | 国产福利小视频在线观看 | av超碰在线观看 | 青青青青操 | 福利在线电影 | 91免费影片 | 色婷婷久久综合 | 色婷婷av一区二区三区之红樱桃 | 一二三区在线观看 | 美女扒开腿男人爽桶 | 手机在线观看av片 | 久色视频在线观看 | 男男做性免费视频网 | 国产男男gay体育生白袜 | 黄色免费网 | 女同av网站 | 狠狠操综合 | 伊人222成人综合网 亚洲日本中文 | 波多野结衣免费视频观看 | 中文字幕免费一区二区 | 色呦呦在线观看视频 | 日韩av在线一区二区 | 影音先锋中文字幕人妻 | 日日干天天干 | japanese在线| 白丝美女被草 | 中文字幕有码在线播放 | 免费看又黄又无码的网站 | 日本五十肥熟交尾 | 久操视频在线 | 国产精品欧美一区二区三区 |