I have a C++ library that I want to wrap using SWIG to use it with C# and Java. I am having some trouble in writing the interface for methods that make use of polymorphic parameters.
In my C++ library code, I have a method that does this.
long FindShapes(vector<tr1::shared_ptr<CShapes> > &fArray, int ShapeType);
This instantiates an appropriate shape (square, circle or polygon) object and fills it into the vector.
In my C# code,
using (ShapesVec shapes = new ShapesVec())
Result rs = ShapesLibCS.FindShapes(shapes, 1); // 1 = Circle
for (int i = 0; i < shapes .Count; ++i)
Circle circle = shapes[i] as Circle;
Here, the casting of the Shape object to Circle fails. I came across an article that handles the polymorphic return types. (http://www.voom.net/swig-csharp-java-downcast). Here he instructs SWIG to instantiate the concrete class based on the enum value. But this doesn't help in my case as shapes[i] calls the get_item of the Vector. And in the generated code for that, it always forces the instantiation of the abstract class.