我正在为我的软件库使用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)客户端::WaitForJob;
waitforme函数模板返回指向swig python对象指针。这是正确的,但我希望它与jobme指针相同。
有人能指出这是否可能吗??
发布于 2011-10-03 10:37:11
返回的Swig对象是jobme的代理。无论你在哪里需要它,它都应该像JobT一样工作。
啊,我想我明白问题所在了。您需要为每个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>;因此%template实例化了一个模板,但它不会猜测您可能用来实例化它的所有可能的类型。
https://stackoverflow.com/questions/4592981
复制相似问题