InstanceOf

Namespace rswhite4 at googlemail.com
Sun Jun 23 04:14:29 PDT 2013


On Sunday, 23 June 2013 at 11:04:59 UTC, Lemonfiend wrote:
> I'm trying to create a fairly generic component system, where 
> an object iterates over a bunch of other objects that all 
> implement a certain interface.
> And this all works fine, however, I would also like to be able 
> to get objects of a specific type (a la instanceOf), and I 
> can't figure out how to do it.
>
> Could anyone help me out?
>
> [code]
> interface I
> {
> 	void update();
> 	void write();
> }
>
> class A : I
> {
> 	int n;
> 	
> 	void update()
> 	{
> 		n++;
> 	}
>
> 	void write()
> 	{
> 		writeln(n);
> 	}
> }
>
> class B : I
> {
> 	int m;
> 	
> 	void update()
> 	{
> 		m--;
> 	}
>
> 	void write()
> 	{
> 		writeln(m);
> 	}
> }
>
> class C
> {
> 	I[] array;
>
> 	void addElem(I elem)
> 	{
> 		array ~= elem;
> 	}
>
> 	void loop()
> 	{
> 		foreach(elem; array)
> 			elem.update();
> 	}
>
> 	void writeAll()
> 	{
> 		foreach(elem; array)
> 			elem.write();
> 	}
>
> 	void writeB()
> 	{
> 		// Only call .write on B's
> 		// How do I get the B's from the array of I's?
> 	}
> }
>
> void main()
> {
> 	C c = new C();
>
> 	c.addElem(new A());
> 	c.addElem(new B());
>
> 	c.loop();
>
> 	c.writeAll();
>
> 	c.writeB(); // This is the problem
> }
> [/code]

foreach (I i; array) {
     if (B b = cast(B) i) { ... }
}


More information about the Digitalmars-d-learn mailing list