Skip to content

Support PyTypeObject #1692

Closed
Closed
@asadchev

Description

@asadchev

I couldnt find if PyBind supports type objects. If not, then something like this is useful:

  struct typeobject : py::handle {
    typeobject(PyTypeObject *type)
      : py::handle((PyObject*)type)
    {
    }
    typeobject static float_() { return typeobject(&PyFloat_Type); }
    typeobject static int_() { return typeobject(&PyInt_Type); }
    typeobject static str() { return typeobject(&PyString_Type); }
  };

or

  py::handle typeobject(PyTypeObject *type) {
    return py::handle((PyObject*)type);
  }

  template<typename T>
  py::handle typeobject();

  template<>
  py::handle typeobject<py::float_>() { return typeobject(&PyFloat_Type); }

  template<>
  py::handle typeobject<py::int_>() { return typeobject(&PyInt_Type); }

  template<>
  py::handle typeobject<py::str>() { return typeobject(&PyString_Type); }

for example handling type arguments
module.def("foo", py::arg("bar") = typeobject::str());

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions