enum_: move most functionality to a non-template implementation

This commit addresses an inefficiency in how enums are created in
pybind11. Most of the enum_<> implementation is completely generic --
however, being a template class, it ended up instantiating vast amounts
of essentially identical code in larger projects with many enums.

This commit introduces a generic non-templated helper class that is
compatible with any kind of enumeration. enum_ then becomes a thin
wrapper around this new class.

The new enum_<> API is designed to be 100% compatible with the old one.
This commit is contained in:
Wenzel Jakob
2018-09-01 01:20:24 +02:00
parent b4b2292488
commit f4245181ae
4 changed files with 159 additions and 84 deletions

View File

@@ -153,4 +153,4 @@ def test_enum_to_int():
def test_duplicate_enum_name():
with pytest.raises(ValueError) as excinfo:
m.register_bad_enum()
assert str(excinfo.value) == "Enum error - element with name: ONE already exists"
assert str(excinfo.value) == 'SimpleEnum: element "ONE" already exists!'