mirror of
https://github.com/pybind/pybind11.git
synced 2026-05-12 01:10:34 +00:00
Fix scoped enums and add scoped enum example
PR #309 broke scoped enums, which failed to compile because the added: value == value2 comparison isn't valid for a scoped enum (they aren't implicitly convertible to the underlying type). This commit fixes it by explicitly converting the enum value to its underlying type before doing the comparison. It also adds a scoped enum example to the constants-and-functions example that triggers the problem fixed in this commit.
This commit is contained in:
@@ -14,6 +14,11 @@ enum EMyEnumeration {
|
||||
ESecondEntry
|
||||
};
|
||||
|
||||
enum class ECMyEnum {
|
||||
Two = 2,
|
||||
Three
|
||||
};
|
||||
|
||||
class ExampleWithEnum {
|
||||
public:
|
||||
enum EMode {
|
||||
@@ -41,6 +46,10 @@ float test_function3(int i) {
|
||||
return (float) i / 2.f;
|
||||
}
|
||||
|
||||
void test_ecenum(ECMyEnum z) {
|
||||
std::cout << "test_ecenum(ECMyEnum::" << (z == ECMyEnum::Two ? "Two" : "Three") << ")" << std::endl;
|
||||
}
|
||||
|
||||
py::bytes return_bytes() {
|
||||
const char *data = "\x01\x00\x02\x00";
|
||||
return std::string(data, 4);
|
||||
@@ -56,6 +65,7 @@ void init_ex_constants_and_functions(py::module &m) {
|
||||
m.def("test_function", &test_function1);
|
||||
m.def("test_function", &test_function2);
|
||||
m.def("test_function", &test_function3);
|
||||
m.def("test_ecenum", &test_ecenum);
|
||||
m.attr("some_constant") = py::int_(14);
|
||||
|
||||
py::enum_<EMyEnumeration>(m, "EMyEnumeration")
|
||||
@@ -63,6 +73,11 @@ void init_ex_constants_and_functions(py::module &m) {
|
||||
.value("ESecondEntry", ESecondEntry)
|
||||
.export_values();
|
||||
|
||||
py::enum_<ECMyEnum>(m, "ECMyEnum")
|
||||
.value("Two", ECMyEnum::Two)
|
||||
.value("Three", ECMyEnum::Three)
|
||||
;
|
||||
|
||||
py::class_<ExampleWithEnum> exenum_class(m, "ExampleWithEnum");
|
||||
exenum_class.def_static("test_function", &ExampleWithEnum::test_function);
|
||||
py::enum_<ExampleWithEnum::EMode>(exenum_class, "EMode")
|
||||
|
||||
Reference in New Issue
Block a user