Interfaces and Dynamic Casts library for betterC classes
Hipreme
msnmancini at hotmail.com
Mon Jan 2 15:56:00 UTC 2023
Hello betterC people. I have done this little project for anyone
wanting to use classes in betterC without losing interface
implementations for them.
The library simply defines `CppExtend` and `CppInterface` as
objects which you must extend. It has a simple allocator `New!T`
and deallocator `Destroy!T`.
It works by defining and redefining functions based on inputs.
The classes implementations are private inside the class, it
stores each implementation with a reference to base class to call
the base class implementation of the functions, so, you can get a
standalone interface like we have in pure D today.
Simple example code to stoke your curiosity:
```d
extern(C++)
{
///Interface
abstract class Printable
{
void print();
}
///Interface
abstract class Stringificable
{
extern(D) string toString2();
}
///New class implementing Printable and Stringificable classes
class Test : CppInterface!(Test, Printable, Stringificable)
{
void print()
{
import core.stdc.stdio;
printf("toString on print function: %s\n", toString2.ptr);
}
extern(D) string toString2()
{
return __traits(identifier, Test);
}
}
}
extern(C) void main()
{
Test t = New!Test;
t.print();
Printable p = t.getInterface!Printable;
p.print();
}
```
I have tested it under DLL boundaries, it is working correctly. I
have worked on this project as a future intention of checking
into how I'm going to make my game engine betterC compatible.
Requires dmd-fe 2.101 or later
https://code.dlang.org/packages/betterc-interface
More information about the Digitalmars-d-announce
mailing list