mirror of https://github.com/pybind/pybind11
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
#include "pybind11_tests.h" |
|
|
|
namespace test_python_multiple_inheritance { |
|
|
|
// Copied from: |
|
// https://github.com/google/clif/blob/5718e4d0807fd3b6a8187dde140069120b81ecef/clif/testing/python_multiple_inheritance.h |
|
|
|
struct CppBase { |
|
explicit CppBase(int value) : base_value(value) {} |
|
int get_base_value() const { return base_value; } |
|
void reset_base_value(int new_value) { base_value = new_value; } |
|
|
|
private: |
|
int base_value; |
|
}; |
|
|
|
struct CppDrvd : CppBase { |
|
explicit CppDrvd(int value) : CppBase(value), drvd_value(value * 3) {} |
|
int get_drvd_value() const { return drvd_value; } |
|
void reset_drvd_value(int new_value) { drvd_value = new_value; } |
|
|
|
int get_base_value_from_drvd() const { return get_base_value(); } |
|
void reset_base_value_from_drvd(int new_value) { reset_base_value(new_value); } |
|
|
|
private: |
|
int drvd_value; |
|
}; |
|
|
|
struct CppDrvd2 : CppBase { |
|
explicit CppDrvd2(int value) : CppBase(value), drvd2_value(value * 5) {} |
|
int get_drvd2_value() const { return drvd2_value; } |
|
void reset_drvd2_value(int new_value) { drvd2_value = new_value; } |
|
|
|
int get_base_value_from_drvd2() const { return get_base_value(); } |
|
void reset_base_value_from_drvd2(int new_value) { reset_base_value(new_value); } |
|
|
|
private: |
|
int drvd2_value; |
|
}; |
|
|
|
} // namespace test_python_multiple_inheritance |
|
|
|
TEST_SUBMODULE(python_multiple_inheritance, m) { |
|
using namespace test_python_multiple_inheritance; |
|
|
|
py::class_<CppBase>(m, "CppBase") |
|
.def(py::init<int>()) |
|
.def("get_base_value", &CppBase::get_base_value) |
|
.def("reset_base_value", &CppBase::reset_base_value); |
|
|
|
py::class_<CppDrvd, CppBase>(m, "CppDrvd") |
|
.def(py::init<int>()) |
|
.def("get_drvd_value", &CppDrvd::get_drvd_value) |
|
.def("reset_drvd_value", &CppDrvd::reset_drvd_value) |
|
.def("get_base_value_from_drvd", &CppDrvd::get_base_value_from_drvd) |
|
.def("reset_base_value_from_drvd", &CppDrvd::reset_base_value_from_drvd); |
|
|
|
py::class_<CppDrvd2, CppBase>(m, "CppDrvd2") |
|
.def(py::init<int>()) |
|
.def("get_drvd2_value", &CppDrvd2::get_drvd2_value) |
|
.def("reset_drvd2_value", &CppDrvd2::reset_drvd2_value) |
|
.def("get_base_value_from_drvd2", &CppDrvd2::get_base_value_from_drvd2) |
|
.def("reset_base_value_from_drvd2", &CppDrvd2::reset_base_value_from_drvd2); |
|
}
|
|
|