我有問題使用Boost-Python包裝Enum for Python。使用Boost-Python包裝枚舉
起初,我打算做類似的東西在的try-catch以下(我已經插入了我的整個代碼如下)聲明:
main_namespace["Motion"] = enum_<TestClass::Motion>("Motion")
.value("walk", TestClass::walk)
.value("bike", TestClass::bike)
;
一切都很好,並編制已完成。在運行時,我得到這個錯誤(這是沒有意義的我):
AttributeError: 'NoneType' object has no attribute 'Motion'
後來我決定寫在我的代碼使用BOOST_PYTHON_MODULE一個Python模塊。 初始化Python解釋器後,我想馬上使用這個模塊,但不知道如何(?)。以下是我的整個代碼:
#include <boost/python.hpp>
#include <iostream>
using namespace std;
using namespace boost::python;
BOOST_PYTHON_MODULE(test)
{
enum_<TestClass::Motion>("Motion")
.value("walk", TestClass::walk)
.value("bike", TestClass::bike)
;
}
int main()
{
Py_Initialize();
try
{
object pyMainModule = import("__main__");
object main_namespace = pyMainModule.attr("__dict__");
//What previously I intended to do
//main_namespace["Motion"] = enum_<TestClass::Motion>("Motion")
// .value("walk", TestClass::walk)
// .value("bike", TestClass::bike)
//;
//I want to use my enum here
//I need something like line below which makes me able to use the enum!
exec("print 'hello world'", main_namespace, main_namespace);
}
catch(error_already_set const&)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
任何有用的知道包裝和使用Python中的枚舉將不勝感激! 在此先感謝
你的演示完美地契合了答案。感謝那。在你強制的範圍內,這對我來說是一種騙術。這實際上解決了我的問題。我想問一個關於python範圍的簡單解釋。其實我無法理解範圍和命名空間之間的區別。 –
@NOVIN:['scope'](http://www.boost.org/doc/libs/1_54_0/libs/python/doc/v2/scope.html#introduction)是一個Boost.Python結構,用於表示名稱空間將包含新包裝的類和函數。另外,如果你發現答案是有益的,你可以考慮[upvoting或accept](http://meta.stackoverflow.com/help/someone-answers)它。 –