Re: What is the correct way to forward method calls to the struct field?

2014-06-22 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-22 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-22 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-22 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-21 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-21 Thread monnoroch via Digitalmars-d-learn

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?

2014-06-21 Thread monnoroch via Digitalmars-d-learn

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

2014-06-19 Thread monnoroch via Digitalmars-d-learn

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

2014-06-19 Thread monnoroch via Digitalmars-d-learn

Oh, found a problem, it was about one more layer of pointer
indirection.