blob: 350435f573a8bd26812f51f0c4c153dc3b9e13e7 [file] [log] [blame]
Wenzel Jakobd7efa4f2016-04-13 13:45:09 +02001/*
2 example/example16.cpp -- automatic upcasting for polymorphic types
3
4 Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
5
6 All rights reserved. Use of this source code is governed by a
7 BSD-style license that can be found in the LICENSE file.
8*/
9
10#include "example.h"
11
12struct BaseClass { virtual ~BaseClass() {} };
13struct DerivedClass1 : BaseClass { };
14struct DerivedClass2 : BaseClass { };
15
16void init_ex16(py::module &m) {
17 py::class_<BaseClass>(m, "BaseClass").def(py::init<>());
18 py::class_<DerivedClass1>(m, "DerivedClass1").def(py::init<>());
19 py::class_<DerivedClass2>(m, "DerivedClass2").def(py::init<>());
20
21 m.def("return_class_1", []() -> BaseClass* { return new DerivedClass1(); });
22 m.def("return_class_2", []() -> BaseClass* { return new DerivedClass2(); });
23 m.def("return_none", []() -> BaseClass* { return nullptr; });
24}