我在使用 Boost.Python lib 向 python 公开抽象类时遇到了一些问题。我正在使用 1_53_0 boost 和 Python 33。
有一个与此问题相关的类似线程。(如何在 Python 中实现 C++ 类,由 C++ 调用?)我正在关注eudoxos响应,他在抽象类 Base 周围制作了一个包装器,该类具有返回字符串类型的方法。
我正在做类似的事情,但我经常收到编译错误:
- 错误 1 错误 C2668: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string' : 对重载函数 d:\temp\example\example.h 的模糊调用 d:\temp\example\example.h 20
- 8 IntelliSense:从“boost::python::detail::method_result”到“std::string”的多个用户定义转换适用:d:\temp\example\example.h 20
上述错误与该行有关:
return this->get_override("getName")();
从我的示例如下所示:
#include <string>
#include "boost/python.hpp"
class Person {
public:
virtual std::string getName() { return "Base"; };
virtual void setName(std::string name) {};
};
class PersonWrap : public Person, public boost::python::wrapper<Person>
{
public:
std::string getName()
{
return this->get_override("getName")();
}
void setName(std::string name)
{
this->get_override("setName")();
}
};
class Student : public Person {
public:
std::string getName() { return myName; };
void setName(std::string name) { myName = name; };
std::string myName;
};
BOOST_PYTHON_MODULE(example)
{
boost::python::class_<PersonWrap, boost::noncopyable>("Person")
.def("getName", (&Person::getName))
.def("setName", (&Person::setName))
;
boost::python::class_<Student, boost::python::bases<Person>>("Student")
.def("getName", (&Student::getName))
.def("setName", (&Student::setName))
;
}
任何意见表示赞赏,在此先感谢!