SWIG:python回调函数模板和共享指针作为返回值
我正在使用SWIG for python为我的软件库创建包装器,我有以下功能:SWIG:python回调函数模板和共享指针作为返回值,python,boost,swig,shared-ptr,Python,Boost,Swig,Shared Ptr,我正在使用SWIG for python为我的软件库创建包装器,我有以下功能: template<class PR> boost::shared_ptr<JobT<PR> > Client::WaitForJob() { boost::shared_ptr<JobT<PR> > job; while (!job.get()) { list<boost::sha
template<class PR>
boost::shared_ptr<JobT<PR> > Client::WaitForJob() {
boost::shared_ptr<JobT<PR> > job;
while (!job.get()) {
list<boost::shared_ptr<Job> > jobs = GetJobs(p_jobName, p_jobID, "", JobT<PR>::New);
while (jobs.size() > 0) {
job = boost::dynamic_pointer_cast<JobT<PR> >(jobs.front());
jobs.pop_front();
if (ClaimJob(job)) return job;
else job.reset();
}
}
return job;
}
模板
boost::shared_ptr客户端::WaitForJob(){
boost::共享任务;
而(!job.get()){
list jobs=GetJobs(p_jobName,p_jobID,“,JobT::New);
while(jobs.size()>0){
job=boost::dynamic_pointer_cast(jobs.front());
jobs.pop_front();
if(ClaimJob(job))返回job;
else job.reset();
}
}
返回工作;
}
在本例中,我能够为JobT创建一个类,并且还使用了boos_指针。
目前,我的界面文件中有以下内容:
%模板(jobme)JobT;
%包括“boost_shared_ptr.i”
%共享ptr(作业名称)
%模板(waitforme)客户端::WaitForJob
waitforme函数模板返回指向swig python对象的指针。这是正确的,但我希望它与jobme指针相同
有人能指出这是否可行吗???您得到的Swig对象是
作业的代理。无论您在哪里需要它,它都应该像作业一样工作
啊,我想我明白了问题所在。您需要为您拥有的每个PR
实例化JobT
和Client::WaitForJob
:
%include "boost_shared_ptr.i"
%shared_ptr(JobT<Foo>);
#include <JobT.hpp>
%template(Job##NAME) JobT<Foo>;
%template Client::WaitForJob<Foo>;
%包括“boost\u shared\u ptr.i”
%共享ptr(作业);
#包括
%模板(作业##名称)作业;
%模板客户端::WaitForJob;
因此,%template
实例化了一个模板,但它并没有猜测您可能使用的所有类型来实例化它