%module li_attribute %include <exception.i> //#define SWIG_ATTRIBUTE_TEMPLATE %include <attribute.i> %{ // forward reference needed if using SWIG_ATTRIBUTE_TEMPLATE struct A; struct MyFoo; // %attribute2 does not work with templates %} %attribute(A, int, a, get_a, set_a); %attributeref(A, int, b); %attributeref(Param<int>, int, value); %attribute(A, int, c, get_c); /* read-only */ %attributeref(A, int, d, b); /* renames accessor method 'b' to attribute name 'd' */ %attributeref(B, A*, a) %inline { struct A { A(int a, int b, int c) : _a(a), _b(b), _c(c) { } int get_a() const { return _a; } void set_a(int aa) { _a = aa; } /* only one ref method */ int& b() { return _b; } int get_c() const { return _c; } private: int _a; int _b; int _c; }; template <class C> struct Param { Param(C v) : _v(v) { } const int& value() const { return _v; } int& value() { return _v; } private: C _v; }; struct B { B(A *a) : mA(a) { } A*& a() { return mA; } protected: A* mA; }; } %template(Param_i) Param<int>; // class/struct attribute with get/set methods using return/pass by reference %attribute2(MyClass, MyFoo, Foo, GetFoo, SetFoo); %attribute2ref(MyClass, MyFoo, Foo2); %inline %{ struct MyFoo { MyFoo() : x(-1) {} int x; }; class MyClass { MyFoo foo; MyFoo foo2; public: MyFoo& GetFoo() { return foo; } void SetFoo(const MyFoo& other) { foo = other; } MyFoo& Foo2() { return foo2; } }; %} // class/struct attribute with get/set methods using return/pass by value %attributeval(MyClassVal, MyFoo, ReadWriteFoo, GetFoo, SetFoo); %attributeval(MyClassVal, MyFoo, ReadOnlyFoo, GetFoo); %inline %{ class MyClassVal { MyFoo foo; public: MyFoo GetFoo() { return foo; } void SetFoo(MyFoo other) { foo = other; } }; %} // string attribute with get/set methods using return/pass by value %include <std_string.i> %attributestring(MyStringyClass, std::string, ReadWriteString, GetString, SetString); %attributestring(MyStringyClass, std::string, ReadOnlyString, GetString); %inline %{ class MyStringyClass { std::string str; public: MyStringyClass(const std::string &val) : str(val) {} std::string GetString() { return str; } void SetString(std::string other) { str = other; } }; %}
Generated by dwww version 1.15 on Tue Jul 2 00:22:38 CEST 2024.