[*] Simplify linking with inline virtual override methods under fwd declare

This commit is contained in:
Reece Wilson 2022-05-29 12:42:09 +01:00
parent f6025d08cd
commit 8712c9a621
2 changed files with 6 additions and 20 deletions

View File

@ -41,7 +41,7 @@
#define AUI_METHOD_FUNCTIONAL_IMPL(ret, name, params) \ #define AUI_METHOD_FUNCTIONAL_IMPL(ret, name, params) \
name ## _t name ## Functional; \ name ## _t name ## Functional; \
virtual ret name (AUI_EXPAND_PARAMS params) override \ inline virtual ret name (AUI_EXPAND_PARAMS params) override \
{ \ { \
if (!name ## Functional) \ if (!name ## Functional) \
{ \ { \
@ -96,7 +96,7 @@
AU_FOR_EACH_3(tmpl, __VA_ARGS__) \ AU_FOR_EACH_3(tmpl, __VA_ARGS__) \
}; };
#define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_FWD, name, __VA_ARGS__) #define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_IMPL, name, __VA_ARGS__)
#define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_IMPL, name, __VA_ARGS__) #define AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_FUNCTIONAL_BASE(AUI_METHOD_FUNCTIONAL_IMPL, name, __VA_ARGS__)
#define AUI_METHOD(returnValue, name, parameters) returnValue, name, parameters #define AUI_METHOD(returnValue, name, parameters) returnValue, name, parameters
@ -113,4 +113,6 @@
#define AUI_INTERFACE_FWD(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, __VA_ARGS__) #define AUI_INTERFACE_FWD(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_FWD(name, __VA_ARGS__)
/// Entrypoint into Aurora Interfaces | Forward declare and define in a single translation unit /// Entrypoint into Aurora Interfaces | Forward declare and define in a single translation unit
#define AUI_INTERFACE_IMPL(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, __VA_ARGS__) AUI_PIN_ODR(name) #define AUI_INTERFACE_IMPL AUI_INTERFACE_FWD //(name, ...) AUI_DEFINE_INTERFACE_START_STRUCT(name, __VA_ARGS__) AUI_DEFINE_INTERFACE_START_CPP_WRAPPER_IMPL(name, __VA_ARGS__) AUI_PIN_ODR(name)
#define AUI_INTERFACE AUI_INTERFACE_FWD

View File

@ -4,32 +4,16 @@ This library implements the macros required to define Aurora style interfaces. D
## Example usage: ## Example usage:
#### In your common header:
```c
#if defined(MY_LIB_GEN_BINDINGS)
#define LIB_INTERFACE(name, list) AUI_INTERFACE_IMPL(name, list)
#define
#define LIB_INTERFACE(name, list) AUI_INTERFACE_FWD(name, list)
#endif
```
#### In your public API: #### In your public API:
```c ```c
LIB_INTERFACE(IInputMouseSubscriber, AUI_INTERFACE(IInputMouseSubscriber,
AUI_METHOD(void, onButtonPress, (AuUInt8, mb)), AUI_METHOD(void, onButtonPress, (AuUInt8, mb)),
AUI_METHOD(void, onButtonTick, (AuUInt8, mb)), AUI_METHOD(void, onButtonTick, (AuUInt8, mb)),
AUI_METHOD(void, onButtonUp, (AuUInt8, mb)) AUI_METHOD(void, onButtonUp, (AuUInt8, mb))
); );
``` ```
#### In a dedicated translation unit:
```c++
#define MY_LIB_GEN_BINDINGS
#include <AuroraForEach.hpp>
#include <AuroraInterfaces.hpp>
#include <[MyPublicAPI].hpp>
```
#### Usage: C++ inheritance (covers SWIG and CppSharp) #### Usage: C++ inheritance (covers SWIG and CppSharp)
``` ```
#include <AuroraForEach.hpp> #include <AuroraForEach.hpp>