SWIG: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

我正在使用SWIG for python为我的软件库创建包装器,我有以下功能:

    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
实例化了一个模板,但它并没有猜测您可能使用的所有类型来实例化它