@@ -89,6 +89,24 @@ class ModuleNum{
8989 int y;
9090};
9191
92+ class ModuleProperties {
93+ public:
94+ ModuleProperties () : value(0.0 ) {}
95+
96+ double get () { return value; }
97+ double get_const () const { return value; }
98+ void set (double value_) { value = value_; }
99+
100+ double value;
101+ };
102+
103+ double ModuleProperties_get (ModuleProperties* p) {
104+ return p->value ;
105+ }
106+ void ModuleProperties_set (ModuleProperties* p, double value) {
107+ p->value = value;
108+ }
109+
92110class ModuleNumber {
93111public:
94112 ModuleNumber () : x(0.0 ), y(0 ) {};
@@ -137,6 +155,24 @@ double Test_get_x_pointer(ModuleTest* x) {
137155 return x->value ;
138156}
139157
158+ class ModuleBase {
159+ public:
160+ ModuleBase () : value(1.0 ) {}
161+ virtual ~ModuleBase () {}
162+ double value;
163+ };
164+
165+ class ModuleDerived : public ModuleBase {
166+ public:
167+ ModuleDerived () { value = 2.0 ; }
168+ };
169+
170+ RCPP_EXPOSED_CLASS_NODECL (ModuleBase)
171+
172+ double ModuleBase_value (const ModuleBase& x) {
173+ return x.value ;
174+ }
175+
140176class ModuleGadget {
141177public:
142178 ModuleGadget () {}
@@ -166,6 +202,10 @@ RCPP_MODULE(demoModule) {
166202 function (" bla1" , &bla1 );
167203 function (" bla2" , &bla2 );
168204
205+ // formals with defaults, and formals shorter than the parameter list
206+ function (" foo_formals" , &foo, List::create (_[" x" ] = 2 , _[" y" ] = 10.0 ));
207+ function (" foo_short_formals" , &foo, List::create (_[" x" ] = 2 ));
208+
169209 function (" test_reference" , test_reference);
170210 function (" test_const_reference" , test_const_reference);
171211 function (" test_const" , test_const);
@@ -193,6 +233,21 @@ RCPP_MODULE(demoModule) {
193233 .property (" y" , &ModuleNum::getY)
194234 ;
195235
236+ // one property per class_::property() overload: getters are member,
237+ // const member or free functions, setters are member or free functions
238+ class_<ModuleProperties>(" ModuleProperties" )
239+ .constructor ()
240+ .property (" get" , &ModuleProperties::get)
241+ .property (" get_const" , &ModuleProperties::get_const)
242+ .property (" get_free" , &ModuleProperties_get, " free getter" )
243+ .property (" get_set" , &ModuleProperties::get, &ModuleProperties::set)
244+ .property (" get_const_set" , &ModuleProperties::get_const, &ModuleProperties::set)
245+ .property (" get_set_free" , &ModuleProperties::get, &ModuleProperties_set)
246+ .property (" get_const_set_free" , &ModuleProperties::get_const, &ModuleProperties_set)
247+ .property (" get_free_set" , &ModuleProperties_get, &ModuleProperties::set)
248+ .property (" get_free_set_free" , &ModuleProperties_get, &ModuleProperties_set)
249+ ;
250+
196251 class_<ModuleNumber>(" ModuleNumber" )
197252
198253 .constructor ()
@@ -217,6 +272,17 @@ RCPP_MODULE(demoModule) {
217272 .method (" get" , &ModuleRandomizer::get)
218273 ;
219274
275+ class_<ModuleBase>(" ModuleBase" )
276+ .constructor ()
277+ ;
278+
279+ class_<ModuleDerived>(" ModuleDerived" )
280+ .derives <ModuleBase>(" ModuleBase" )
281+ .constructor ()
282+ ;
283+
284+ function (" ModuleBase_value" , &ModuleBase_value);
285+
220286 class_<ModuleGadget>(" ModuleGadget" )
221287 .constructor ()
222288 .method (" value" , static_cast <void (ModuleGadget::*)(int )>(&ModuleGadget::value))
0 commit comments