mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-26 15:12:01 +00:00
5fd5074a0b
Eigen::Ref is a common way to pass eigen dense types without needing a template, e.g. the single definition `void func(Eigen::Ref<Eigen::MatrixXd> x)` can be called with any double matrix-like object. The current pybind11 eigen support fails with internal errors if attempting to bind a function with an Eigen::Ref<...> argument because Eigen::Ref<...> satisfies the "is_eigen_dense" requirement, but can't compile if actually used: Eigen::Ref<...> itself is not default constructible, and so the argument std::tuple containing an Eigen::Ref<...> isn't constructible, which results in compilation failure. This commit adds support for Eigen::Ref<...> by giving it its own type_caster implementation which consists of an internal type_caster of the referenced type, load/cast methods that dispatch to the internal type_caster, and a unique_ptr to an Eigen::Ref<> instance that gets set during load(). There is, of course, no performance advantage for pybind11-using code of using Eigen::Ref<...>--we are allocating a matrix of the derived type when loading it--but this has the advantage of allowing pybind11 to bind transparently to C++ methods taking Eigen::Refs. |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
eigen.cpp | ||
eigen.py | ||
eigen.ref | ||
example-arg-keywords-and-defaults.cpp | ||
example-arg-keywords-and-defaults.py | ||
example-arg-keywords-and-defaults.ref | ||
example-buffers.cpp | ||
example-buffers.py | ||
example-buffers.ref | ||
example-callbacks.cpp | ||
example-callbacks.py | ||
example-callbacks.ref | ||
example-constants-and-functions.cpp | ||
example-constants-and-functions.py | ||
example-constants-and-functions.ref | ||
example-custom-exceptions.cpp | ||
example-custom-exceptions.py | ||
example-custom-exceptions.ref | ||
example-eval_call.py | ||
example-eval.cpp | ||
example-eval.py | ||
example-eval.ref | ||
example-inheritance.cpp | ||
example-inheritance.py | ||
example-inheritance.ref | ||
example-keep-alive.cpp | ||
example-keep-alive.py | ||
example-keep-alive.ref | ||
example-methods-and-attributes.cpp | ||
example-methods-and-attributes.py | ||
example-methods-and-attributes.ref | ||
example-modules.cpp | ||
example-modules.py | ||
example-modules.ref | ||
example-numpy-vectorize.cpp | ||
example-numpy-vectorize.py | ||
example-numpy-vectorize.ref | ||
example-opaque-types.cpp | ||
example-opaque-types.py | ||
example-opaque-types.ref | ||
example-operator-overloading.cpp | ||
example-operator-overloading.py | ||
example-operator-overloading.ref | ||
example-pickling.cpp | ||
example-pickling.py | ||
example-pickling.ref | ||
example-python-types.cpp | ||
example-python-types.py | ||
example-python-types.ref | ||
example-sequences-and-iterators.cpp | ||
example-sequences-and-iterators.py | ||
example-sequences-and-iterators.ref | ||
example-smart-ptr.cpp | ||
example-smart-ptr.py | ||
example-smart-ptr.ref | ||
example-stl-binder-vector.cpp | ||
example-stl-binder-vector.py | ||
example-stl-binder-vector.ref | ||
example-virtual-functions.cpp | ||
example-virtual-functions.py | ||
example-virtual-functions.ref | ||
example.cpp | ||
example.h | ||
issues.cpp | ||
issues.py | ||
issues.ref | ||
object.h | ||
run_test.py |