把Python嵌入C++中類的成員屬性的內(nèi)容介紹
在C++中類的相關(guān)成員能使用關(guān)鍵字去聲明為不一樣的屬性。但是在Python中則會(huì)依靠類的相關(guān)屬性的命名的方式。以下的文章就是介紹把Python嵌入C++中類的成員屬性的相關(guān)實(shí)際操作方案的介紹。
把Python嵌入C++中類的成員屬性
在C++中類的相關(guān)成員能使用關(guān)鍵字去聲明為不一樣的屬性。但是在Python中則會(huì)依靠類的相關(guān)屬性的命名的方式。使用Boost.Python可以將其C++中類成員的屬性傳遞給Python。如下所示代碼使用Boost.Python來處理類成員的屬性。將BOOST_PYTHON_MODULE中的代碼改為如下所示。
- BOOST_PYTHON_MODULE(Message)
- {
- class_<Message>("Message", init<std::string>())
- .def("set", &Message::set)
- .def("get", &Message::get)
- .def_readwrite("msg", &Message::msg);
- ;
- }
此處將Message類中的成員msg設(shè)置為可讀寫,還可以使用“.def_readonly”將其設(shè)置為只讀屬性。對(duì)于類中的私有成員還可以使用“.add_property”將其操作函數(shù)設(shè)置為Python類中的屬性。如下代碼使用“.add_property”對(duì)私有成員進(jìn)行操作。
- BOOST_PYTHON_MODULE(Message)
- {
- class_<Message>("Message",init<std::string>())
- .add_property("msg",&Message::get,&Message::set);
- }
以下代碼在Python中使用編譯好的Message模塊。
- >>> import Message
- >>> s = Message.Message('hi')
- >>> s.msg
- 'hi'
- >>> s.msg = 'boot'
- >>> s.msg
- 'boot'
4.類的繼承
C++中類的繼承關(guān)系也可以通過Boost.Python反映到Python模塊中。以下代碼將父類和子類分別導(dǎo)入到Python模塊中。以下就是對(duì)Python嵌入C++中類的成員屬性
- #include <string.h>
- #include <iostream.h>
- #include <boost/python.hpp>
- using namespace boost::python;
- #pragma comment(lib, "boost_python.lib")
- class Message
- {
- public:
- std::string msg;
- Message(std::string m)
- {
- mmsg = m;
- }
- void set(std::string m)
- {
- mmsg = m;
- }
- std::string get()
- {
- return msg;
- }
- };
- class Msg:public Message
- {
- public:
- int count;
- Msg(std::string m):Message(m)
- {
- }
- void setcount(int n)
- {
- count = n;
- }
- int getcount()
- {
- return count;
- }
- };
- BOOST_PYTHON_MODULE(Message)
- {
- class_<Message>("Message",init<std::string>())
- .add_property("msg",&Message::get,&Message::set);
- class_<Msg, bases<Message> >("Msg",init<std::string>())
- .def("setcount", &Msg::setcount)
- .def("getcount", &Msg::getcount);
以上就是對(duì)Python嵌入C++中類的成員屬性相關(guān)的內(nèi)容的介紹,望你會(huì)有所收獲。
【編輯推薦】