summaryrefslogtreecommitdiffstatshomepage
path: root/examples/usercmodule/cppexample/example.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/usercmodule/cppexample/example.cpp')
-rw-r--r--examples/usercmodule/cppexample/example.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/examples/usercmodule/cppexample/example.cpp b/examples/usercmodule/cppexample/example.cpp
new file mode 100644
index 0000000000..06809732a4
--- /dev/null
+++ b/examples/usercmodule/cppexample/example.cpp
@@ -0,0 +1,17 @@
+extern "C" {
+#include <examplemodule.h>
+
+// Here we implement the function using C++ code, but since it's
+// declaration has to be compatible with C everything goes in extern "C" scope.
+mp_obj_t cppfunc(mp_obj_t a_obj, mp_obj_t b_obj) {
+ // Prove we have (at least) C++11 features.
+ const auto a = mp_obj_get_int(a_obj);
+ const auto b = mp_obj_get_int(b_obj);
+ const auto sum = [&]() {
+ return mp_obj_new_int(a + b);
+ } ();
+ // Prove we're being scanned for QSTRs.
+ mp_obj_t tup[] = {sum, MP_ROM_QSTR(MP_QSTR_hellocpp)};
+ return mp_obj_new_tuple(2, tup);
+}
+}