我目前正在尝试使用Boost :: Python向Python公开c ++接口(纯虚拟类)。 c ++接口是:
#include "Tab.hpp"
class Agent
{
virtual void start(const Tab& t) = 0;
virtual void stop() = 0;
};
并且,通过阅读“官方”教程,我设法编写并构建了下一个Python包装器:
#include <boost/python.hpp>
#include <Tabl.hpp>
#include <Agent.hpp>
using namespace boost::python;
struct AgentWrapper: Agent, wrapper<Agent>
{
public:
void start(const Tab& t)
{
this->get_override("start")();
}
void stop()
{
this->get_override("stop")();
}
};
BOOST_PYTHON_MODULE(PythonWrapper)
{
class_<AgentWrapper, boost::noncopyable>("Agent")
.def("start", pure_virtual(&Agent::start) )
.def("stop", pure_virtual(&Agent::stop) )
;
}
请注意,构建它时我没有任何问题。但令我担忧的是,正如您所看到的,AgentWrapper :: start似乎没有将任何参数传递给Agent :: start in:
void start(const Tab& t)
{
this->get_override("start")();
}
python包装器如何知道“start”收到一个参数?我怎么能这样做?
答案 0 :(得分:4)
get_override函数返回一个类型为override的对象,该对象对于不同数量的参数有多个重载。所以你应该能够做到这一点:
void start(const Tab& t)
{
this->get_override("start")(t);
}
你试过这个吗?