January 04, 2018
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.
January 04, 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");
	}
}