gpt4 book ai didi

c++ - 使用 boost.python 将类暴露给 python 时出现构建错误

转载 作者:太空狗 更新时间:2023-10-29 21:45:32 26 4
gpt4 key购买 nike

我在使用 Boost.Python 库将抽象类暴露给 python 时遇到了一些问题。我正在使用 1_53_0 boost 和 Python 33。

有一个与此问题相关的类似线程。( How can I implement a C++ class in Python, to be called by C++? ) 我在关注 eudoxos响应,他在抽象类 Base 周围做了一个包装,它有一个返回字符串类型的方法。

我正在做类似的事情,但我经常遇到编译错误:

  • 错误 1 ​​错误 C2668:'std::basic_string<_Elem,_Traits,_Ax>::basic_string':对重载函数 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))
;
}

欢迎任何意见,提前致谢!

最佳答案

我已经找到了这个问题的解决方案,它是这样工作的:

std::string getName()
{
//return this->get_override("getName")();
return boost::python::call<std::string>(this->get_override("getName")());
}

然而,根据the boost python documentation这只能用于 MSVC6/7,这不是我的情况,因为我使用的是 VS2010 (MSVC 10.0)。

关于c++ - 使用 boost.python 将类暴露给 python 时出现构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17364529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com