Re: What is the correct way to forward method calls to the struct field?
Thanks a lot! There is a problem though: when i pass incorrect parameters to such a method, it says, that S has no such field, which is a misleading error message.
Re: What is the correct way to forward method calls to the struct field?
There is also a problem: when i declare opDispatch to be private, i still have access to this forwarding from another package. Is it a bug or what?
Re: What is the correct way to forward method calls to the struct field?
Nah, this gives me lots of compiler crap, like .empty and others, when compiler tries to compile them.
Re: What is the correct way to forward method calls to the struct field?
Cool! Only this does not show me where the error was. __FILE__ and __LINE__ is not any help here, because it's a template. Any other way to find out where the actual error was?
What is the correct way to forward method calls to the struct field?
I tried this: struct S { R opDispatch(string name, R, Args...)(Args args) { return mixin((*iface). ~ name)(iface, args); } SomeT ** iface; } But then val.foo(1, 2) gives me no property 'foo' for type 'S'. I've seen the template solution: struct S { template opDispatch(string name) { R opDispatch(R, Args...)(Args args) { return mixin((*iface). ~ name)(iface, args); } } SomeT ** iface; } But that does not seem to work anymore. I've tried then struct S { auto ifc() { return *iface; } auto ifc() const { return *iface; } SomeT ** iface; } And that worked, but it's not perfect: i also want to pass iface as a first argument. val.foo(1, 2) - (*val.iface).foo(val.iface, 1, 2). Any suggestions?
Re: What is the correct way to forward method calls to the struct field?
Actyaly, last variant didn't work either: i was testing it inside S like ifc.foo(1), so UFCS kiked in, not alias this.
Re: What is the correct way to forward method calls to the struct field?
On Saturday, 21 June 2014 at 18:16:17 UTC, monnoroch wrote: Actyaly, last variant didn't work either: i was testing it inside S like ifc.foo(1), so UFCS kiked in, not alias this. Oh, my bad, alias impl this; actually did work. But the first argument problem still holds.
Link to C library
I can't link to libjvm.so. Here's my code: extern (C) { int JNI_CreateJavaVM(void ** pvm, void ** penv, void * args); } void main() { writefln(0x%x, .JNI_CreateJavaVM); } Which ptints wrong stuff. When then i use it and check the contents of **pvm is also prints wrong stuff full of zeroes, but the result is 0(JNI_OK). I build it with: dmd -m64 main.d -I. -L-ljvm -debug. Any suggestions?
Re: Link to C library
Oh, found a problem, it was about one more layer of pointer indirection.