<html>
<head>
<title>SWIG:Examples:java:template</title>
</head>

<body bgcolor="#ffffff">


<tt>SWIG/Examples/java/template/</tt>
<hr>

<H2>C++ template support</H2>

<p>
This example illustrates how C++ templates can be used from Java using SWIG.

<h2>The C++ Code</h2>

Let's take a templated function and a templated class as follows:

<blockquote>
<pre>
/* File : example.h */

// Some template definitions

template<class T> T max(T a, T b) { return  a&gt;b ? a : b; }

template<class T> class vector {
  T *v;
  int sz;
 public:
  vector(int _sz) {
    v = new T[_sz];
    sz = _sz;
  }
  T &amp;get(int index) {
    return v[index];
  }
  void set(int index, T &amp;val) {
    v[index] = val;
  }
#ifdef SWIG
  %extend {
    T getitem(int index) {
      return self-&gt;get(index);
    }
    void setitem(int index, T val) {
      self-&gt;set(index,val);
    }
  }
#endif
};
</pre>
</blockquote>
The %extend is used for a neater interface from Java as the functions <tt>get</tt> and <tt>set</tt> use C++ references to primitive types. These are tricky to use from Java as they end up as a pointer in Java (Java long).

<h2>The SWIG interface</h2>

A simple SWIG interface for this can be built by simply grabbing the header file
like this:

<blockquote>
<pre>
/* File : example.i */
%module example

%{
#include "example.h"
%}

/* Let's just grab the original header file here */
%include "example.h"

/* Now instantiate some specific template declarations */

%template(maxint) max<int>;
%template(maxdouble) max<double>;
%template(vecint) vector<int>;
%template(vecdouble) vector<double>;
</pre>
</blockquote>

Note that SWIG parses the templated function <tt>max</tt> and templated class <tt>vector</tt> and so knows about them. However to generate code for use from Java, SWIG has to be told which class/type to use as the template parameter. The SWIG directive %template is used for this.

<h2>A sample Java program</h2>

Click <a href="runme.java">here</a> to see a Java program that calls the C++ functions from Java.

<h2>Notes</h2>
Use templated classes just like you would any other SWIG generated Java class. Use the classnames specified by the %template directive.

<blockquote>
<pre>
vecdouble dv = new vecdouble(1000);
dv.setitem(i, 12.34));
</pre>
</blockquote>

<hr>
</body>
</html>
