mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 17:32:55 +00:00
69 lines
2.2 KiB
HTML
69 lines
2.2 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"
|
|
"http://www.w3.org/TR/REC-html40/strict.dtd">
|
|
<title>
|
|
Wrapping enums
|
|
</title>
|
|
<div>
|
|
<h1>
|
|
<img width="277" height="86" id="_x0000_i1025" align="center"
|
|
src="c++boost.gif" alt= "c++boost.gif (8819 bytes)">Wrapping enums
|
|
</h1>
|
|
<p>Because there is in general no way to deduce that a value of arbitrary type T
|
|
is an enumeration constant, py_cpp cannot automatically convert enum values to
|
|
and from Python. To handle this case, you need to decide how you want the enum
|
|
to show up in Python (since Python doesn't have enums). If you are satisfied
|
|
with a Python int as a way to represent your enum values, you can write some
|
|
simple <code>from_python()</code> and <code>to_python()</code> functions in
|
|
<code>namespace py::</code>
|
|
|
|
<blockquote><pre>
|
|
#ifndef PY_NO_INLINE_FRIENDS_IN_NAMESPACE // workaround GCC 2.95.2 bug
|
|
namespace py {
|
|
#endif
|
|
|
|
MyEnumType from_python(PyObject* x,
|
|
py::Type<MyEnumType>)
|
|
{
|
|
return static_cast<MyEnum>(
|
|
from_python(x, py::Type<long>()));
|
|
}
|
|
|
|
PyObject* to_python(MyEnumType x)
|
|
{
|
|
return to_python(static_cast<long>(x));
|
|
}
|
|
|
|
#ifndef PY_NO_INLINE_FRIENDS_IN_NAMESPACE
|
|
}
|
|
#endif
|
|
|
|
</pre></blockquote>
|
|
This technique defines the conversions of
|
|
<code>MyEnumType</code> in terms of the conversions for the built-in
|
|
<code>long</code> type.
|
|
|
|
You may also want to add a bunch of lines like this to your module
|
|
initialization:
|
|
|
|
<blockquote><pre>
|
|
mymodule.add(py::to_python(enum_value_1), "enum_value_1");
|
|
mymodule.add(py::to_python(enum_value_2), "enum_value_2");
|
|
...
|
|
</pre></blockquote>
|
|
You can also add these to an extension class definition:
|
|
<blockquote><pre>
|
|
my_class.add(py::to_python(enum_value_1), "enum_value_1");
|
|
my_class.add(py::to_python(enum_value_2), "enum_value_2");
|
|
...
|
|
</pre></blockquote>
|
|
<p>
|
|
© Copyright David Abrahams 2000. Permission to copy, use, modify,
|
|
sell and distribute this document is granted provided this copyright
|
|
notice appears in all copies. This document is provided "as is" without
|
|
express or implied warranty, and with no claim as to its suitability
|
|
for any purpose.
|
|
<p>
|
|
Updated: Nov 5, 2000
|
|
</div>
|
|
|