SWIG:带有函数模板和共享指针作为返回值的python回调

时间:2011-01-04 11:14:44

标签: 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::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;
    }

在这种情况下,我可以为JobT创建一个类,我也使用了boos_pointer。 目前我的界面文件中有以下内容:

%template(jobme)JobT; %include“boost_shared_ptr.i” %的shared_ptr(jobme)

%template(waitforme)Client :: WaitForJob;

waitforme函数模板返回一个指向swig python对象的指针。这是正确的,但我希望它与jobme指针相同。

有人可以指出这是否可能?

1 个答案:

答案 0 :(得分:0)

您获得的Swig对象是jobme的代理。它应该像JobT一样在你需要的地方工作。

啊,我想我看到了问题。您需要为每个JobT实例化Client::WaitForJobPR

%include "boost_shared_ptr.i"
%shared_ptr(JobT<Foo>);

#include <JobT.hpp>
%template(Job##NAME) JobT<Foo>;
%template Client::WaitForJob<Foo>;

所以%template实例化一个模板,但它没有猜测你用它来实例化它的所有可能的类型。