blob: 3130a3f781972a3ab4d8a46e010ab74d3a3e883e [file] [log] [blame]
SWIG Features
<h2>SWIG Features</h2>
<p>
This information is based on the SWIG-1.3.22 release.
<h3>Code Generation</h3>
SWIG current generates wrapper code for thirteen different target languages:
<ul>
<li>Allegro CL
<li>C#
<li>Chicken
<li>Guile
<li>Java
<li>Modula-3
<li>Mzscheme
<li>OCAML
<li>Perl
<li>PHP
<li>Python
<li>Ruby
<li>Tcl
</ul>
In addition to this, an XML output module is also available and work
is in progress on a Pike module.
<h3>ANSI C</h3>
SWIG is capable of wrapping all of ANSI C. Features include:
<ul>
<li>Handling of <em>all</em> ANSI C datatypes.
<li>Global functions, global variables, and constants.
<Li>Structures and unions.
<li>Pointers.
<li>Arrays and multidimensional arrays.
<li>Pointers to functions.
<li>Variable length arguments.
<li>Typedef.
<li>Enums.
</ul>
<h3>ANSI C++</h3>
SWIG provides wrapping support for almost all of ANSI C++.
<ul>
<Li>All C++ datatypes.
<Li>References.
<li>Pointers to members.
<li>Classes.
<li>Inheritance and multiple inheritance.
<li>Overloaded functions and methods (using dynamic dispatch).
<li>Overloaded operators.
<li>Static members.
<li>Namespaces (including using declarations, aliases, nesting, etc.)
<li>Templates
<li>Member templates
<li>Template specialization and partial specialization.
<li>Smart pointers
<li>Library support for strings, STL vectors, and more.
</ul>
The only major C++ feature not currently supported by SWIG is the
wrapping of nested classes--a problem we're working on. SWIG also
does not allow C++ virtual methods to be implemented in certain
target languages (a subtle feature that might be useful in projects that
rely heavily on the use of callback functions).
<p>
C++ users who rely on advanced template programming techniques
(e.g., template meta-programming) should also be aware that SWIG
currently requires manual instantiation of all template classes.
Therefore, if your application somehow involves the instantiation of 50000
template classes, your mileage might vary.
<h3>Preprocessing</h3>
SWIG provides a full C preprocessor with the following features:
<ul>
<li>Macro expansion.
<li>Automatic wrapping of #define statements as constants (when applicable).
<li>Support for C99 (variadic macro expansion).
</ul>
<h3>Customization features</h3>
SWIG provides control over most aspects of wrapper generation. Most
of these customization options are fully integrated into the C++ type
system--making it easy to apply customizations across inheritance
hierarchies, template instantiations, and more. Features include:
<ul>
<li>Customizated type conversion/marshaling.
<Li>Exception handling.
<li>Class/structure extension.
<li>Memory management.
<li>Ambiguity resolution.
<li>Template instantiation.
<li>File import and cross-module linking.
<li>Code inclusion, helper function support.
<li>Extensive diagnostics (error/warning messages).
<li>Extended SWIG macro handling.
</ul>