首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIG:使用函数模板和共享指针作为返回值的python回调

SWIG:使用函数模板和共享指针作为返回值的python回调
EN

Stack Overflow用户
提问于 2011-01-04 19:14:44
回答 1查看 494关注 0票数 0

我正在为我的软件库使用SWIG for python创建包装器,并且我有以下函数:

代码语言:javascript
复制
    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)客户端::WaitForJob;

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

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

EN

回答 1

Stack Overflow用户

发布于 2011-10-03 10:37:11

返回的Swig对象是jobme的代理。无论你在哪里需要它,它都应该像JobT一样工作。

啊,我想我明白问题所在了。您需要为每个PR实例化JobTClient::WaitForJob

代码语言:javascript
复制
%include "boost_shared_ptr.i"
%shared_ptr(JobT<Foo>);

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

因此%template实例化了一个模板,但它不会猜测您可能用来实例化它的所有可能的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4592981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档