On Friday, 16 December 2016 at 16:24:18 UTC, Daniel N wrote:
On Friday, 16 December 2016 at 15:17:15 UTC, Ilya Yaroshenko wrote:
Hi

Is it possible to use classes, which do not have monitor and other DRuntime stuff?

Object can be allocated/deallocated using allocators, but they are very complex for betterC mode (monitor, mutex, object.d dependency).

Can we have something more primitive?

Ilya

extern(c++)
class

Works pretty good in my experience, at least it gets rid of the monitor, yay!

Thanks,
DRuntime is required anyway, but this is step forward.

ldmd2 -betterC -defaultlib= -O -inline -release -run cppclass.d

extern(C++) class Hw
{
        import core.stdc.stdio;

        this()
        {

        }

        void hw()
        {
                printf("hey\n");
        }
}

import std.traits;
extern(C)
int main()
{
        enum classSize = __traits(classInstanceSize, Hw);
        align(16)
        ubyte[classSize] payload = void;
        auto init = cast(const(ubyte)[]) typeid(Hw).initializer;
        foreach(i; 0..classSize)
                payload[i] = init[i];
        auto object = cast(Hw) payload.ptr;
        object.__ctor();
        object.hw();
        return 0;
}

-------------
Undefined symbols for architecture x86_64:
  "__D14TypeInfo_Class6__vtblZ", referenced from:
      __D8cppclass2Hw7__ClassZ in cppclass-7ed89bd.o

Reply via email to