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.7 KiB
D
58 lines
1.7 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 std.stdio;
|
|
import example;
|
|
|
|
void main() {
|
|
// ----- Object creation -----
|
|
|
|
writeln( "Creating some objects:" );
|
|
|
|
{
|
|
scope Square s = new Square(10);
|
|
scope Circle c = new Circle(10);
|
|
|
|
// ----- Access a static member -----
|
|
writefln( "%s shapes were created.", Shape.nshapes );
|
|
|
|
// ----- 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;
|
|
|
|
writeln( "\nHere is their current position:" );
|
|
writefln( " Circle = ( %s, %s )", c.x, c.y );
|
|
writefln( " Square = ( %s, %s )", s.x, s.y );
|
|
|
|
// ----- Call some methods -----
|
|
|
|
writeln( "\nHere are some properties of the shapes:" );
|
|
Shape[] shapes = [ cast(Shape) c, cast(Shape) s ];
|
|
foreach ( currentShape; shapes )
|
|
{
|
|
writefln( " %s", currentShape.classinfo.name );
|
|
writefln( " area = %s", currentShape.area() );
|
|
writefln( " perimeter = %s", currentShape.perimeter() );
|
|
}
|
|
|
|
// Notice how the area() and perimeter() functions really
|
|
// invoke the appropriate virtual method on each object.
|
|
|
|
// ----- Delete everything -----
|
|
writeln( "\nGuess I'll clean up now:" );
|
|
// Note: when this using scope is exited the D destructors are called which
|
|
// in turn call the C++ destructors.
|
|
}
|
|
|
|
writefln( "%s shapes remain", Shape.nshapes );
|
|
writeln( "\nGoodbye!" );
|
|
}
|