我有一个使用Boost python框架公开给python的C ++类。
struct Var
{
Var(std::string name) : name(name), value() {}
std::string const name;
float value;
};
BOOST_PYTHON_MODULE(hello)
{
class_<Var>("Var", init<std::string>())
.def_readonly("name", &Var::name)
.def_readwrite("value", &Var::value);
;
}
以下是使用此类的python脚本:
x = hello.Var("hello")
def print_func():
print(x.value)
是否可以x在C ++代码内访问对象并为value成员变量分配一个在c ++中的值,该值在print_func()python脚本中执行时会打印出来?
您可以如下更改python和c ++代码
/```js /I hope you are expecting some functionality like below
class Var { public: Var(std::string name) : name(name), value() {} std::string const name; double value; void set_value(); double get_value(); };
Var::set_value(double value) { this->value = value; }
double Var::get_value(){
return this->value;
}
// c++ Var class constructor caller Var* var_constructor_caller(string name){
return new Var(name);
}
BOOST_PYTHON_MODULE(hello_ext) { //class_("Var", initstd::string()) class_ ("Var") // this line is for c++ class not exposed to python .def("set_value", &Var::set_value) .def("get_value", &Var::get_value) .def_readonly("name", &Var::name) .def_readwrite("value", &Var::value); ;
def("var_constructor_caller", var_constructor_caller, return_value_policy<manage_new_object>());
// by <manage_new_object> return type you are giving owner ship to python to delete the object
} 以下是使用此类的python脚本:
import hello_ext as hello var_obj = hello.var_constructor_caller("myname") var_obj.set_value(3.14) value = var_obj.get_value() print value var_object.value = 5.75 #you call directly assign value also to c++ class data member print value
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。