On Tuesday, 3 September 2019 at 20:03:37 UTC, Martin DeMello wrote:
On Sunday, 1 September 2019 at 11:19:11 UTC, DanielG wrote:
Do you know whether SWIG's D generator is even being maintained?

I've searched for it on the forums in the past and got the impression that it's outdated.

I didn't realise that :( It was included in the current release of swig, so I figured it was maintained.

It's pretty sad if it's not, because trying to access C++ libraries directly from D has some limitations (most notably not being able to create new C++ objects from D) and swig would have let things just work.

Not true, with the core.stdcpp.new_ module it is possible to allocate the memory to create an object directly from D! Just allocate the memory (YourCPPClass.sizeof) and call std.conv.emplace to use the constructor

If you want there is also a wrapper that simplifies the operation https://github.com/ErnyTech/CPPNew


A small example:
// test.cpp
#include <iostream>

class Test {
  public:
    Test(int);
    ~Test();
    void set(int);
    void print();
  private:
    int a;
};

Test::Test(int number) {
  this->set(number);
}

Test::~Test() {
  std::cout << "Destructor called" << std::endl;
}

void Test::set(int number) {
  this->a = number;
}

void Test::print() {
  std::cout << this->a << std::endl;
}

// test.d
extern(C++) {
  class Test {
    final this(int);
    final ~this();
    final void set(int);
    final void print();
  }
}

void main() {
  import cppnew : CPPNew;
  import cppnew : CPPDelete;

  auto test = CPPNew!Test(67);
  test.print(); // will print 67
  test.setNumber(12);
  test.print(); // will print 12
  CPPDelete(test); // will print Destructor called
}

Reply via email to