SWIG Features
SWIG Features
This information is based on the current release, SWIG-1.3.16.
Code Generation
SWIG current generates wrapper code for nine different target languages:
- Guile
- Java
- Mzscheme
- OCAML
- Perl
- PHP
- Python
- Ruby
- Tcl
In addition to this, an XML output module was recently added and work
is in progress on a Pike module.
ANSI C
SWIG is capable of wrapping all of ANSI C. Features include:
- Handling of all ANSI C datatypes.
- Global functions, global variables, and constants.
- Structures and unions.
- Pointers.
- Arrays and multidimensional arrays.
- Pointers to functions.
- Variable length arguments.
- Typedef.
ANSI C++
SWIG provides wrapping support for almost all of ANSI C++.
- All C++ datatypes.
- References.
- Pointers to members.
- Classes.
- Inheritance and multiple inheritance.
- Overloaded functions and methods (using dynamic dispatch).
- Overloaded operators.
- Static members.
- Namespaces (including using declarations, aliases, nesting, etc.)
- Templates
- Member templates
- Template specialization and partial specialization.
- Smart pointers
- Library support for strings, STL vectors, and more.
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 the
target language (a subtle feature that might be useful in certain projects).
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.
Preprocessing
SWIG provides a full C preprocessor with the following features:
- Macro expansion.
- Automatic wrapping of #define statements as constants (when applicable).
- Support for C99 (variadic macro expansion).
Customization features
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:
- Customizated type conversion/marshaling.
- Exception handling.
- Class/structure extension.
- Memory management.
- Ambiguity resolution.
- Template instantiation.
- File import and cross-module linking.
- Code inclusion, helper function support.
- Extensive diagnostics (error/warning messages).
- Extended SWIG macro handling.