File: test_python_multiple_inheritance.cpp

package info (click to toggle)
pybind11 2.13.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,744 kB
  • sloc: cpp: 21,857; python: 10,487; ansic: 3,288; makefile: 204; sh: 36
file content (45 lines) | stat: -rw-r--r-- 1,555 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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;
};

} // 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);
}