Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
pybind11
Commits
7c2461ee
Commit
7c2461ee
authored
Nov 20, 2016
by
Wenzel Jakob
Browse files
resolve issue involving inheritance + def_static + override (fixes #511)
parent
405f6d1d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
1 deletion
+33
-1
include/pybind11/pybind11.h
include/pybind11/pybind11.h
+1
-1
tests/test_issues.cpp
tests/test_issues.cpp
+20
-0
tests/test_issues.py
tests/test_issues.py
+12
-0
No files found.
include/pybind11/pybind11.h
View file @
7c2461ee
...
@@ -260,7 +260,7 @@ protected:
...
@@ -260,7 +260,7 @@ protected:
chain
=
(
detail
::
function_record
*
)
rec_capsule
;
chain
=
(
detail
::
function_record
*
)
rec_capsule
;
/* Never append a method to an overload chain of a parent class;
/* Never append a method to an overload chain of a parent class;
instead, hide the parent's overloads in this case */
instead, hide the parent's overloads in this case */
if
(
chain
->
class_
!=
rec
->
class_
)
if
(
chain
->
scope
!=
rec
->
scope
)
chain
=
nullptr
;
chain
=
nullptr
;
}
}
// Don't trigger for things like the default __init__, which are wrapper_descriptors that we are intentionally replacing
// Don't trigger for things like the default __init__, which are wrapper_descriptors that we are intentionally replacing
...
...
tests/test_issues.cpp
View file @
7c2461ee
...
@@ -351,6 +351,26 @@ void init_issues(py::module &m) {
...
@@ -351,6 +351,26 @@ void init_issues(py::module &m) {
/// Issue #484: number conversion generates unhandled exceptions
/// Issue #484: number conversion generates unhandled exceptions
m2
.
def
(
"test_complex"
,
[](
float
x
)
{
py
::
print
(
"{}"
_s
.
format
(
x
));
});
m2
.
def
(
"test_complex"
,
[](
float
x
)
{
py
::
print
(
"{}"
_s
.
format
(
x
));
});
m2
.
def
(
"test_complex"
,
[](
std
::
complex
<
float
>
x
)
{
py
::
print
(
"({}, {})"
_s
.
format
(
x
.
real
(),
x
.
imag
()));
});
m2
.
def
(
"test_complex"
,
[](
std
::
complex
<
float
>
x
)
{
py
::
print
(
"({}, {})"
_s
.
format
(
x
.
real
(),
x
.
imag
()));
});
/// Issue #511: problem with inheritance + overwritten def_static
struct
MyBase
{
static
std
::
unique_ptr
<
MyBase
>
make
()
{
return
std
::
unique_ptr
<
MyBase
>
(
new
MyBase
());
}
};
struct
MyDerived
:
MyBase
{
static
std
::
unique_ptr
<
MyDerived
>
make
()
{
return
std
::
unique_ptr
<
MyDerived
>
(
new
MyDerived
());
}
};
py
::
class_
<
MyBase
>
(
m2
,
"MyBase"
)
.
def_static
(
"make"
,
&
MyBase
::
make
);
py
::
class_
<
MyDerived
,
MyBase
>
(
m2
,
"MyDerived"
)
.
def_static
(
"make"
,
&
MyDerived
::
make
)
.
def_static
(
"make2"
,
&
MyDerived
::
make
);
}
}
// MSVC workaround: trying to use a lambda here crashes MSCV
// MSVC workaround: trying to use a lambda here crashes MSCV
...
...
tests/test_issues.py
View file @
7c2461ee
...
@@ -237,3 +237,15 @@ def test_complex_cast(capture):
...
@@ -237,3 +237,15 @@ def test_complex_cast(capture):
1.0
1.0
(0.0, 2.0)
(0.0, 2.0)
"""
"""
def
test_inheritance_override_def_static
():
from
pybind11_tests.issues
import
MyBase
,
MyDerived
b
=
MyBase
.
make
()
d1
=
MyDerived
.
make2
()
d2
=
MyDerived
.
make
()
assert
isinstance
(
b
,
MyBase
)
assert
isinstance
(
d1
,
MyDerived
)
assert
isinstance
(
d2
,
MyDerived
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment