digitalmars.D.learn - Putting function pointers / delegates into associative array.
What I'm trying to do here is to be able to call a function based
off of a key.
I'm not sure how to do this, I've been messing around a bit, but
the compiler doesn't like what I'm doing.
Im getting:
test.d(20): Error: cannot implicitly convert expression &this.A
of type void delegate() to void function()
test.d(21): Error: cannot implicitly convert expression &this.B
of type void delegate() to void function()
I'm new to the idea of using delegates. Here's the code:
void main() {
tester t = new tester();
t.callFuncs('a');
t.callFuncs('b');
}
class tester {
private void delegate() [char] funcs;
this() {
void delegate() a;
void delegate() b;
a.funcptr = &A;
b.funcptr = &B;
this.funcs = ['a': a, 'b': b ];
}
public void callFuncs(char a) {
auto t = funcs[a];
t();
}
private void A() {
writeln("A");
}
private void B() {
writeln("B");
}
}
I'm not sure how to go about this. It would be really cool if I
can use function pointer this way.. Could someone give me a bit
of advice as to what to do here?
I don't want to have to bust out a big case statement for this
type of thing.
Thanks.
Jan 03 2018
On Thursday, 4 January 2018 at 01:40:21 UTC, Mark wrote:What I'm trying to do here is to be able to call a function based off of a key.class tester { private void delegate() [char] funcs; this() { funcs = ['a': &A, 'b': &B]; } public void callFuncs(char a) { funcs[a](); } private void A() { writeln("A"); } private void B() { writeln("B"); } }
Jan 03 2018








visitor <visitor gmail.com>