Compare commits

...

3 Commits

Author SHA1 Message Date
Ralf W. Grosse-Kunstleve
508cf237f2
Merge 89771bbc05 into 330aae51cf 2024-11-18 21:43:31 +08:00
pre-commit-ci[bot]
89771bbc05 style: pre-commit fixes 2024-10-12 19:10:20 +00:00
Ralf W. Grosse-Kunstleve
f40ffc0262
type_caster_incomplete_type sketch 2024-10-12 12:06:16 -07:00
3 changed files with 59 additions and 0 deletions

View File

@ -149,6 +149,7 @@ set(PYBIND11_TEST_FILES
test_stl_binders
test_tagbased_polymorphic
test_thread
test_type_caster_incomplete_type
test_type_caster_pyobject_ptr
test_type_caster_std_function_specializations
test_union

View File

@ -0,0 +1,47 @@
#include "pybind11_tests.h"
namespace test_type_caster_incomplete_type {
struct ForwardDeclaredType {};
} // namespace test_type_caster_incomplete_type
using ForwardDeclaredType = test_type_caster_incomplete_type::ForwardDeclaredType;
// TODO: Move to pybind11/type_caster_incomplete_type.h, wrap in a macro.
namespace pybind11 {
namespace detail {
template <>
class type_caster<ForwardDeclaredType> {
public:
static constexpr auto name = const_name("object");
static handle
cast(ForwardDeclaredType * /*src*/, return_value_policy /*policy*/, handle /*parent*/) {
return py::none().release(); // TODO: Build and return capsule with src pointer;
}
bool load(handle /*src*/, bool /*convert*/) {
// TODO: Assign pointer_capsule = src after inspecting src.
return true;
}
template <typename T>
using cast_op_type = ForwardDeclaredType *;
explicit operator ForwardDeclaredType *() {
return nullptr; // TODO: Retrieve C++ pointer from pointer_capsule.
}
private:
capsule pointer_capsule;
};
} // namespace detail
} // namespace pybind11
TEST_SUBMODULE(type_caster_incomplete_type, m) {
m.def("rtrn_fwd_decl_type_ptr", []() { return reinterpret_cast<ForwardDeclaredType *>(0); });
m.def("pass_fwd_decl_type_ptr", [](ForwardDeclaredType *) {});
}

View File

@ -0,0 +1,11 @@
from __future__ import annotations
from pybind11_tests import type_caster_incomplete_type as m
def test_rtrn_fwd_decl_type_ptr():
assert m.rtrn_fwd_decl_type_ptr() is None
def test_pass_fwd_decl_type_ptr():
assert m.pass_fwd_decl_type_ptr(None) is None