| // This example illustrates how C++ classes can be used from D using SWIG. |
| // The D class gets mapped onto the C++ class and behaves as if it is a D class. |
| module runme; |
| |
| import tango.io.Stdout; |
| import example; |
| |
| void main() { |
| // ----- Object creation ----- |
| |
| Stdout( "Creating some objects:" ).newline; |
| |
| { |
| scope Square s = new Square(10); |
| scope Circle c = new Circle(10); |
| |
| // ----- Access a static member ----- |
| Stdout.format( "{} shapes were created.", Shape.nshapes ).newline; |
| |
| // ----- Member data access ----- |
| |
| // Notice how we can do this using functions specific to |
| // the 'Circle' class. |
| c.x = 20; |
| c.y = 30; |
| |
| // Now use the same functions in the base class |
| Shape shape = s; |
| shape.x = -10; |
| shape.y = 5; |
| |
| Stdout( "\nHere is their current position:" ).newline; |
| Stdout.format( " Circle = ( {}, {} )", c.x, c.y ).newline; |
| Stdout.format( " Square = ( {}, {} )", s.x, s.y ).newline; |
| |
| // ----- Call some methods ----- |
| |
| Stdout( "\nHere are some properties of the shapes:" ).newline; |
| Shape[] shapes = [ cast(Shape) c, cast(Shape) s ]; |
| foreach ( currentShape; shapes ) |
| { |
| Stdout.format( " {}", currentShape.classinfo.name ).newline; |
| Stdout.format( " area = {}", currentShape.area() ).newline; |
| Stdout.format( " perimeter = {}", currentShape.perimeter() ).newline; |
| } |
| |
| // Notice how the area() and perimeter() functions really |
| // invoke the appropriate virtual method on each object. |
| |
| // ----- Delete everything ----- |
| Stdout( "\nGuess I'll clean up now:" ).newline; |
| // Note: when this using scope is exited the D destructors are called which |
| // in turn call the C++ destructors. |
| } |
| |
| Stdout.format( "{} shapes remain", Shape.nshapes ).newline; |
| Stdout( "\nGoodbye!" ).newline; |
| } |