Aligns the C++ generators with the C generator and the symbol naming: the native (zero-serialization, same-process) wrapper is the bare `<lib>.hpp` and the CBOR (inter-process) wrapper carries the `_cbor` suffix — mirroring the C headers (`<lib>.h` / `<lib>_cbor.h`) and the `<name>` / `<name>_cbor` exports. Previously native was `<lib>_native.hpp` and CBOR was the bare `<lib>.hpp`, which is backwards from the symbol convention and would collide on the native `<lib>.h` when both ABIs emit into one dir (ffiMode=both). With the flip, a single `genbindings_cpp` run now drops `<lib>.hpp` + `<lib>_cbor.hpp` side by side, exactly like c_bindings holds both `.h` headers. Consumers updated to match: the CBOR cpp_bindings driver and the C++ e2e suite include `*_cbor.hpp`; the native example includes the bare `<lib>.hpp`. Validated: native example runs on `my_timer.hpp`; C++ e2e suite 19/19 on the `_cbor.hpp` headers; check_bindings_cpp regen is deterministic. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.7 KiB
C++ bindings — native (generated)
Generated native (zero-serialization) C++ bindings for the timer library —
the C++ counterpart of c_bindings / go_bindings. The CBOR C++ bindings live
in ../cpp_bindings.
| File | Description |
|---|---|
my_timer.hpp |
Generated wrapper: a C++ struct + toC/fromC per {.ffi.} type, and a My_timerNode class whose methods marshal typed args into / read typed struct returns out of the native ABI — no CBOR. |
my_timer.h |
Native C header (structs + entry points) the .hpp includes. |
main.cpp, Makefile |
A driver + build. |
my_timer::My_timerNode node(my_timer::TimerConfig{"my-app"});
std::cout << node.Version();
auto r = node.Echo(my_timer::EchoRequest{"hello", 5}); // -> EchoResponse
std::cout << r.echoed << " / " << r.timerName;
Regenerate with nimble genbindings_cpp_native (from the repo root).
Build & run
cd examples/timer/cpp_native_bindings
make run
Status
Requests are fully supported: scalar / string / bool / nested struct and now
sequences (std::vector) and optionals (std::optional) — create, version,
echo, complex, schedule all generate and round-trip typed values (ASAN-clean).
toC uses a holder that owns the C-array backing while string pointers borrow
the C++ argument (valid for the call's duration; the library deep-copies).
Native typed events are supported too: node.On<Event>(handler) registers a
native listener and the typed payload arrives via fromC (no CBOR).
The native header is the bare my_timer.hpp and the CBOR counterpart is
my_timer_cbor.hpp — matching the C headers (my_timer.h / my_timer_cbor.h)
and the <name> / <name>_cbor symbol naming.