В настоящее время я пытаюсь представить интерфейс C ++ (чисто виртуальный класс) для Python, используя Boost :: Python. Интерфейс c ++:
Agent.hpp
#include "Tab.hpp"
class Agent
{
virtual void start(const Tab& t) = 0;
virtual void stop() = 0;
};
И, прочитав «официальный» учебник, мне удалось написать и собрать следующую оболочку Python:
Agent.cpp
#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" получает один аргумент? Как я могу это сделать?