12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # 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"
|