swig/Examples/test-suite/li_boost_shared_ptr_template.i
Joseph Wang 6e6e45f8be fix R namespace conflict
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12931 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-03-18 06:22:04 +00:00

104 lines
2 KiB
OpenEdge ABL

%module li_boost_shared_ptr_template
// First test- Bug 3333549 - using INTEGER typedef in %shared_ptr before typedef defined
%{
#include <boost/shared_ptr.hpp>
#ifdef SWIGR
// remove naming conflict with R symbol
#define INTEGER MYINTEGER
#endif
typedef int INTEGER;
template <class T>
class Base {
public:
virtual T bar() {return 1;}
};
template <class T>
class Derived : public Base<T> {
public:
virtual T bar() {return 2;}
};
INTEGER bar_getter(Base<INTEGER>& foo) {
return foo.bar();
}
%}
#if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGPYTHON) || defined(SWIGD)
#define SHARED_PTR_WRAPPERS_IMPLEMENTED
#endif
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
%include <boost_shared_ptr.i>
%shared_ptr(Base<INTEGER>)
%shared_ptr(Derived<INTEGER>)
#endif
typedef int INTEGER;
template <class T>
class Base {
public:
virtual T bar() {return 1;}
};
template <class T>
class Derived : public Base<T> {
public:
virtual T bar() {return 2;}
};
INTEGER bar_getter(Base<INTEGER>& foo) {
return foo.bar();
}
%template(BaseINTEGER) Base<INTEGER>;
%template(DerivedINTEGER) Derived<INTEGER>;
// 2nd test - templates with default template parameters
#if defined(SHARED_PTR_WRAPPERS_IMPLEMENTED)
%shared_ptr(Space::BaseDefault<short>)
%shared_ptr(Space::DerivedDefault<short>)
%shared_ptr(Space::DerivedDefault2<short>)
#endif
%inline %{
namespace Space {
typedef int INT_TYPEDEF;
template <class X, class T = int>
class BaseDefault {
public:
virtual T bar2() {return 3;}
};
template <class X, class T = int>
class DerivedDefault : public BaseDefault<X, T> {
public:
virtual T bar2() {return 4;}
};
template <class X>
class DerivedDefault2 : public BaseDefault<X> {
public:
virtual int bar2() {return 4;}
};
int bar2_getter(BaseDefault<short>& foo) {
return foo.bar2();
}
}
%}
%template(BaseDefaultInt) Space::BaseDefault<short>;
%template(DerivedDefaultInt) Space::DerivedDefault<short>;
%template(DerivedDefaultInt2) Space::DerivedDefault2<short>;