data_members.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 133 行
CPP
133 行
// Copyright David Abrahams 2002.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#include <boost/python/class.hpp>#include <boost/python/module.hpp>#include <boost/python/return_value_policy.hpp>#include <boost/python/return_by_value.hpp>#include "test_class.hpp"#if defined(_AIX) && defined(__EDG_VERSION__) && __EDG_VERSION__ < 245# include <iostream> // works around a KCC intermediate code generation bug#endifusing namespace boost::python;typedef test_class<> X;struct Y : test_class<1>{ Y(int v) : test_class<1>(v) {} Y& operator=(Y const& rhs) { x = rhs.x; return *this; } bool q;};double get_fair_value(X const& x) { return x.value(); }struct VarBase{ VarBase(std::string name_) : name(name_) {} std::string const name; std::string get_name1() const { return name; } };struct Var : VarBase{ Var(std::string name_) : VarBase(name_), value(), name2(name.c_str()), y(6) {} std::string const& get_name2() const { return name; } float value; char const* name2; Y y; static int static1; static Y static2;};int Var::static1 = 0;Y Var::static2(0);// Compilability regression testsnamespace boost_python_test{ struct trivial { trivial() : value(123) {} double value; }; struct Color3 { static const Color3 black; }; const Color3 Color3::black#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) = {}#endif ; void compilability_test() { class_<trivial>("trivial") .add_property("property", make_getter(&trivial::value, return_value_policy<return_by_value>())) .def_readonly("readonly", &trivial::value) ; class_< Color3 >("Color3", init< const Color3 & >()) .def_readonly("BLACK", &Color3::black) // line 17 ; }}BOOST_PYTHON_MODULE(data_members_ext){ using namespace boost_python_test; class_<X>("X", init<int>()) .def("value", &X::value) .def("set", &X::set) .def_readonly("x", &X::x) .add_property("fair_value", get_fair_value) ; class_<Y>("Y", init<int>()) .def("value", &Y::value) .def("set", &Y::set) .def_readwrite("x", &Y::x) .def_readwrite("q", &Y::q) ; class_<Var>("Var", init<std::string>()) .def_readonly("name", &Var::name) .def_readonly("name2", &Var::name2) .def_readwrite("value", &Var::value) .def_readonly("y", &Var::y) // Test return_by_value for plain values and for // pointers... return_by_value was implemented as a // side-effect of implementing data member support, so it made // sense to add the test here. .def("get_name1", &Var::get_name1, return_value_policy<return_by_value>()) .def("get_name2", &Var::get_name2, return_value_policy<return_by_value>()) .add_property("name3", &Var::get_name1) // Test static data members .def_readonly("ro1a", &Var::static1) .def_readonly("ro1b", Var::static1) .def_readwrite("rw1a", &Var::static1) .def_readwrite("rw1b", Var::static1) .def_readonly("ro2a", &Var::static2) .def_readonly("ro2b", Var::static2) .def_readwrite("rw2a", &Var::static2) .def_readwrite("rw2b", Var::static2) ;}#include "module_tail.cpp"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?