It is still a bit rough around some edges, particularly with regard to multi-threading and operator overloading, and there are some documentation bits missing, but it should be fine for basic use. The test-suite should build and run fine with the current versions of DMD, LDC and Tango (at least) on Linux x86_64 and Mac OS X 10.6. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12299 626c5289-ae23-0410-ae9c-e8d60b6d4f22
58 lines
1.8 KiB
D
58 lines
1.8 KiB
D
// 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;
|
|
}
|