PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/template_forward.i

#
Swig | 71 lines | 55 code | 16 blank | 0 comment | 0 complexity | b30d3032c302fd6126009ed50b9b7247 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %module template_forward
  2. %{
  3. namespace foo {
  4. template<class T> class bar { };
  5. }
  6. %}
  7. namespace foo {
  8. template<class T> class bar;
  9. };
  10. %inline %{
  11. namespace foo {
  12. double test1(const bar<double> &x) { return 0; }
  13. bar<double> test2() {
  14. return bar<double>();
  15. }
  16. }
  17. %}
  18. %inline {
  19. // Forward declarations
  20. template<class RangeScalar, class DomainScalar = RangeScalar> class LinearOpBase;
  21. template<class Scalar> class VectorBase;
  22. }
  23. %inline {
  24. // Class Describable
  25. class Describable {
  26. public:
  27. void describe() {}
  28. };
  29. // Class LinearOpBase
  30. template<class RangeScalar, class DomainScalar>
  31. class LinearOpBase : virtual public Describable {
  32. public:
  33. }; // end class LinearOpBase<RangeScalar,DomainScalar>
  34. // Class VectorBase
  35. template<class Scalar>
  36. class VectorBase : virtual public LinearOpBase<Scalar>
  37. {
  38. public:
  39. using LinearOpBase<Scalar>::describe;
  40. }; // end class VectorBase<Scalar>
  41. }
  42. %template (LinearOpBase_double) LinearOpBase<double>;
  43. %template (VectorBase_double) VectorBase<double>;
  44. %template (LinearOpBase_int) LinearOpBase<int,int>;
  45. %template (VectorBase_int) VectorBase<int>;
  46. // Template forward class declarations mixing class and typename without always naming the templated parameter name
  47. %inline %{
  48. template <class> class TClass1;
  49. template <typename> class TClass2;
  50. template <class, typename> class TClass3;
  51. template <class, class, class> class TClass4;
  52. template <typename, typename> class TClass5;
  53. template <typename, class K = double> class TClass6;
  54. template<typename, class K, class C = K> class TClass7;
  55. %}