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
309a85ba
Commit
309a85ba
authored
Mar 08, 2016
by
Wenzel Jakob
Browse files
support std::shared_ptr<const X> and types that indirectly derive from std::enable_shared_from_this
parent
fdc00f50
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
3 additions
and
3 deletions
+3
-3
include/pybind11/cast.h
include/pybind11/cast.h
+2
-2
include/pybind11/pybind11.h
include/pybind11/pybind11.h
+1
-1
No files found.
include/pybind11/cast.h
View file @
309a85ba
...
@@ -204,7 +204,7 @@ public:
...
@@ -204,7 +204,7 @@ public:
protected:
protected:
template
<
typename
T
=
type
,
typename
std
::
enable_if
<
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
template
<
typename
T
=
type
,
typename
std
::
enable_if
<
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
static
void
*
copy_constructor
(
const
void
*
arg
)
{
static
void
*
copy_constructor
(
const
void
*
arg
)
{
return
new
type
(
*
((
const
type
*
)
arg
));
return
(
void
*
)
new
type
(
*
((
const
type
*
)
arg
));
}
}
template
<
typename
T
=
type
,
typename
std
::
enable_if
<!
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
template
<
typename
T
=
type
,
typename
std
::
enable_if
<!
detail
::
is_copy_constructible
<
T
>
::
value
,
int
>::
type
=
0
>
static
void
*
copy_constructor
(
const
void
*
)
{
return
nullptr
;
}
static
void
*
copy_constructor
(
const
void
*
)
{
return
nullptr
;
}
...
@@ -508,7 +508,7 @@ public:
...
@@ -508,7 +508,7 @@ public:
return
true
;
return
true
;
}
else
if
(
PyType_IsSubtype
(
Py_TYPE
(
src
.
ptr
()),
typeinfo
->
type
))
{
}
else
if
(
PyType_IsSubtype
(
Py_TYPE
(
src
.
ptr
()),
typeinfo
->
type
))
{
auto
inst
=
(
instance
<
type
,
holder_type
>
*
)
src
.
ptr
();
auto
inst
=
(
instance
<
type
,
holder_type
>
*
)
src
.
ptr
();
value
=
inst
->
value
;
value
=
(
void
*
)
inst
->
value
;
holder
=
inst
->
holder
;
holder
=
inst
->
holder
;
return
true
;
return
true
;
}
}
...
...
include/pybind11/pybind11.h
View file @
309a85ba
...
@@ -864,7 +864,7 @@ private:
...
@@ -864,7 +864,7 @@ private:
template
<
typename
T
>
template
<
typename
T
>
static
void
init_holder_helper
(
instance_type
*
inst
,
const
holder_type
*
/* unused */
,
const
std
::
enable_shared_from_this
<
T
>
*
/* dummy */
)
{
static
void
init_holder_helper
(
instance_type
*
inst
,
const
holder_type
*
/* unused */
,
const
std
::
enable_shared_from_this
<
T
>
*
/* dummy */
)
{
try
{
try
{
new
(
&
inst
->
holder
)
holder_type
(
inst
->
value
->
shared_from_this
());
new
(
&
inst
->
holder
)
holder_type
(
std
::
static_pointer_cast
<
type
>
(
inst
->
value
->
shared_from_this
())
)
;
}
catch
(
const
std
::
bad_weak_ptr
&
)
{
}
catch
(
const
std
::
bad_weak_ptr
&
)
{
new
(
&
inst
->
holder
)
holder_type
(
inst
->
value
);
new
(
&
inst
->
holder
)
holder_type
(
inst
->
value
);
}
}
...
...
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