| # file: runme2.tcl |
| |
| # This file illustrates the low-level C++ interface |
| # created by SWIG. In this case, all of our C++ classes |
| # get converted into function calls. |
| |
| catch { load ./example[info sharedlibextension] example} |
| |
| # ----- Object creation ----- |
| |
| puts "Creating some objects:" |
| set c [new_Circle 10] |
| puts " Created circle $c" |
| set s [new_Square 10] |
| puts " Created square $s" |
| |
| # ----- Access a static member ----- |
| |
| puts "\nA total of $Shape_nshapes shapes were created" |
| |
| # ----- Member data access ----- |
| |
| # Set the location of the object |
| # Note: the base class must be used since that's where x and y |
| # were declared. |
| |
| Shape_x_set $c 20 |
| Shape_y_set $c 30 |
| Shape_x_set $s -10 |
| Shape_y_set $s 5 |
| |
| puts "\nHere is their current position:" |
| puts " Circle = ([Shape_x_get $c], [Shape_y_get $c])" |
| puts " Square = ([Shape_x_get $s], [Shape_y_get $s])" |
| |
| # ----- Call some methods ----- |
| |
| puts "\nHere are some properties of the shapes:" |
| foreach o "$c $s" { |
| puts " $o" |
| puts " area = [Shape_area $o]" |
| puts " perimeter = [Shape_perimeter $o]" |
| } |
| # Notice how the Shape_area() and Shape_perimeter() functions really |
| # invoke the appropriate virtual method on each object. |
| |
| # ----- Try to cause a type error ----- |
| |
| puts "\nI'm going to try and break the type system" |
| |
| if { [catch { |
| # Bad script! |
| Square_area $c # Try to invoke Square method on a Circle |
| puts " Bad bad SWIG!" |
| |
| }]} { |
| puts " Well, it didn't work. Good SWIG." |
| } |
| |
| # ----- Delete everything ----- |
| |
| puts "\nGuess I'll clean up now" |
| |
| # Note: this invokes the virtual destructor |
| delete_Shape $c |
| delete_Shape $s |
| |
| puts "$Shape_nshapes shapes remain" |
| puts "Goodbye" |