forked from tdegeus/pybind11_examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcode_and_wrapper.cpp
59 lines (46 loc) · 1.09 KB
/
code_and_wrapper.cpp
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
// ------------------
// regular C++ header
// ------------------
namespace mymodule {
class Foo
{
public:
Foo() = default;
template <class T>
T bar(const T& a) const
{
T ret = a;
for (auto& i : ret) {
i *= 2.0;
}
return ret;
}
template <class T>
T bar(const T& a, double f) const
{
T ret = a;
for (auto& i : ret) {
i *= f;
}
return ret;
}
};
} // namespace mymodule
// ----------------
// Python interface
// ----------------
namespace py = pybind11;
PYBIND11_MODULE(mymodule, m)
{
py::class_<mymodule::Foo>(m, "Foo")
.def(py::init<>())
.def("bar",
static_cast<std::vector<double> (mymodule::Foo::*)(const std::vector<double>&) const>(&mymodule::Foo::bar),
py::arg("a"))
.def("bar",
static_cast<std::vector<double> (mymodule::Foo::*)(const std::vector<double>&, double) const>(&mymodule::Foo::bar),
py::arg("a"),
py::arg("f"));
}