From aa3f6e0a8109ab4cc759b23c9feccff9cee4e876 Mon Sep 17 00:00:00 2001 From: Johannes Stoelp Date: Wed, 24 Apr 2024 01:07:55 +0200 Subject: fn-wrapper: initial version of macro magic --- content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc (limited to 'content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc') diff --git a/content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc b/content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc new file mode 100644 index 0000000..d3f3ddf --- /dev/null +++ b/content/2024-04-24-fn-wrapper-macro-magic/wrap-v1.cc @@ -0,0 +1,19 @@ +// Mock the common wrapper functionality. For the purpose of this discussion, +// this is just a sink accepting any function argument. +#define MOCK_WRAPPER_IMPL(ret, fn) \ + /* do common work */ \ + static ret wrap_##fn(...); + +// Utility to generate wrapper boilerplate. +#define WRAP(ret, fn, ...) \ + MOCK_WRAPPER_IMPL(ret, fn) \ + \ + extern "C" ret fn(__VA_ARGS__) + +WRAP(int, foo, const char* name) { + return wrap_foo(name); +} + +WRAP(int, bar, const char* name, const char* value) { + return wrap_bar(name, value); +} -- cgit v1.2.3