1. Aug 06, 2016
    • Jason Rhinelander's avatar
      virtual + inheritance example: remove multiple inheritance approach · d6c365bc
      Jason Rhinelander authored
      It was already pretty badly intrusive, but it also appears to make MSVC
      segfault.  Rather than investigating and fixing it, it's easier to just
      remove it.
      d6c365bc
    • Jason Rhinelander's avatar
      Added advanced doc section on virtual methods + inheritance · 0ca96e29
      Jason Rhinelander authored
      As discussed in #320.
      
      The adds a documentation block that mentions that the trampoline classes
      must provide overrides for both the classes' own virtual methods *and*
      any inherited virtual methods.  It also provides a templated solution to
      avoiding method duplication.
      
      The example includes a third method (only mentioned in the "see also"
      section of the documentation addition), using multiple inheritance.
      While this approach works, and avoids code generation in deep
      hierarchies, it is intrusive by requiring that the wrapped classes use
      virtual inheritance, which itself is more instrusive if any of the
      virtual base classes need anything other than default constructors.  As
      per the discussion in #320, it is kept as an example, but not suggested
      in the documentation.
      0ca96e29
  2. Aug 05, 2016
  3. Aug 04, 2016
    • Jason Rhinelander's avatar
      Only support ==/!= int on unscoped enums · d41a2730
      Jason Rhinelander authored
      This makes the Python interface mirror the C++ interface:
      pybind11-exported scoped enums aren't directly comparable to the
      underlying integer values.
      d41a2730
    • Jason Rhinelander's avatar
      Fix scoped enums and add scoped enum example · 61354194
      Jason Rhinelander authored
      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.
      61354194
    • Wenzel Jakob's avatar
      Merge pull request #312 from jagerman/eigen-ref-args · 39ff2d01
      Wenzel Jakob authored
      Add support for Eigen::Ref<...> function arguments
      39ff2d01
    • Jason Rhinelander's avatar
      Add support for Eigen::Ref<...> function arguments · 5fd5074a
      Jason Rhinelander authored
      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.
      5fd5074a
  4. Aug 03, 2016
  5. Aug 02, 2016
  6. Aug 01, 2016
  7. Jul 30, 2016
  8. Jul 19, 2016
    • Wenzel Jakob's avatar
      documentation fix (fixes #290) · f38f359f
      Wenzel Jakob authored
      f38f359f
    • Wenzel Jakob's avatar
      a771e362
    • Wenzel Jakob's avatar
      minor namespace change in example · a975ab25
      Wenzel Jakob authored
      a975ab25
    • Wenzel Jakob's avatar
      descr<> fix for int-to-string conversion · 4a87933b
      Wenzel Jakob authored
      4a87933b
    • Wenzel Jakob's avatar
      Merge pull request #289 from jagerman/example-renaming · 61352e50
      Wenzel Jakob authored
      Rename examples files, as per #288
      61352e50
    • Jason Rhinelander's avatar
      3e2e44f5
    • Jason Rhinelander's avatar
      Rename examples files, as per #288 · b3f3d79f
      Jason Rhinelander authored
      This renames example files from `exampleN` to `example-description`.
      
      Specifically, the following renaming is applied:
      
      example1 -> example-methods-and-attributes
      example2 -> example-python-types
      example3 -> example-operator-overloading
      example4 -> example-constants-and-functions
      example5 -> example-callbacks (*)
      example6 -> example-sequence-and-iterators
      example7 -> example-buffers
      example8 -> example-custom-ref-counting
      example9 -> example-modules
      example10 -> example-numpy-vectorize
      example11 -> example-arg-keywords-and-defaults
      example12 -> example-virtual-functions
      example13 -> example-keep-alive
      example14 -> example-opaque-types
      example15 -> example-pickling
      example16 -> example-inheritance
      example17 -> example-stl-binders
      example18 -> example-eval
      example19 -> example-custom-exceptions
      
      * the inheritance parts of example5 are moved into example-inheritance
      (previously example16), and the remainder is left as example-callbacks.
      
      This commit also renames the internal variables ("Example1",
      "Example2", "Example4", etc.) into non-numeric names ("ExampleMandA",
      "ExamplePythonTypes", "ExampleWithEnum", etc.) to correspond to the
      file renaming.
      
      The order of tests is preserved, but this can easily be changed if
      there is some more natural ordering by updating the list in
      examples/CMakeLists.txt.
      b3f3d79f
    • Wenzel Jakob's avatar
      return value policy clarifications · fb6aed21
      Wenzel Jakob authored
      fb6aed21