"shared" woes: shared instances of anonymous classes

Arafel via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jul 7 02:14:56 PDT 2017


Hi!

I'm trying to wrap my mind around "shared", and I think I have managed 
to more or less grasp it. However I'm having a problem, and it seems 
it's just a missing feature (or rather combination of features) in the 
language (or I haven't found the right keyword combination).

Is there any way to create a shared instance of an anonymous class? 
Let's say:

```
class C {
	shared this() { }
}

void main() {
	shared C c = new /* shared */ C {
		shared this() {
			super();
		}
	});
}
```

This doesn't compile because, of course, the instantiation of the 
anonymous class is not shared.

However, the following code doesn't compile either, and I'm not even 
sure what "shared" is supposed to mean in this context:

```
class C {
	shared this() { }
}

void main() {
	shared C c = new shared(C) {
		shared this() {
			super();
		}
	});
}
```

I tried playing a bit around [1] (the non-shared constructors are 
needed), and ended up even more confused than before!!

Of course if I create a proper named class D, I can instantiate shared 
instances of D, so it's not like there's no workaround... still, coming 
from Java I like anonymous classes, and I think it'd be cool to be able 
to use them in this context.

If somebody knows how this works / is supposed to work, I'd be thankful!

[1]: https://dpaste.dzfl.pl/ce2ba93111a0


More information about the Digitalmars-d-learn mailing list