Le 15/06/11 14:57, Douglas Bates a écrit :
On Wed, Jun 15, 2011 at 6:38 AM, Jonas Rauch<[email protected]>  wrote:
Hey again,

just to clarify: The final solution was to implement all methods of the
derived class that are to be exposed to R and to call the method of the base
class explicitly:

class Bar : public Foo {
     ...
     void doSomething() { Foo::doSomething() }
};

Yes, we've been there before.  According to Romain, it would be very
tricky to expose the method of the underlying class through the
derived class but it has been done in module bindings in Python, on
which Romain patterned some of the Rcpp modules code.

It is just that I need time to steal that from Boost.Python.

This is one of the improvements I want to do in modules.

On Wed, Jun 15, 2011 at 7:16 AM, Jonas Rauch<[email protected]>
wrote:

Actually, having just the declaration like this compiled fine but and
ended up in an unresolved symbol when loading the library.

class Bar : public Foo {
     ...
     void doSomething();
     void Action() {
         [some code here]
     }
};



I actually had to implement doSomething and explicitly call the Method of
the Base class:

class Bar : public Foo {
     ...
     void doSomething() { Foo::doSomething() }
     void Action() {
         [some code here]
     }
};


Since I do not know the internals of Rcpp modules: how hard would it be to
include support for derived classes?

Best regards,
Jonas

On Tue, Jun 14, 2011 at 7:36 PM, Dirk Eddelbuettel<[email protected]>  wrote:

Hi Jonas,

On 14 June 2011 at 19:06, Jonas Rauch wrote:
| I am trying to write an R interface to a library that uses derived
classes in
| the following manner:
|
| class Foo {
|     ...
|     virtual void Action() = 0;
|     void doSomething() {
|         Action();
|         [do complicated stuff]
|     }
|     ...
| };
|
| class Bar : public Foo {
|     ...
|     void Action() {
|         [some code here]
|     }
| };
|
| class Baz : public Foo {
|     ...
|     void Action() {
|         [some other code here]
|     }
| };
|
| etc.
|
| Where the abstract class Foo defines an interface and at the same time
provides
| base functionality that can then be applied to different
implementations of
| "Action".
|
| Is it possible to expose Bar::doSomething() to R using Rcpp modules? I
have
| tried different things and did not get it to work.

Nice C++ design.  And it should work, but I think your only choice really
is
list all exposed functions, ie your need an explicit mention of
Bar::doSomething as well as Baz::doSomething.  That way Rcpp Modules
doesn't
even know these are derived class.  It just seens two identifiers to hook
up
against.  As always, I may be missing parts of the picture in which case
Romain may come forward and correct the record....

|
| I would appreciate any help.
|
| Best regards,
| Jonas Rauch
|
| ----------------------------------------------------------------------
| _______________________________________________
| Rcpp-devel mailing list
| [email protected]
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

--
Gauss once played himself in a zero-sum game and won $50.
                      -- #11 at http://www.gaussfacts.com



_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel



--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
http://romain-francois.com
|- http://bit.ly/lJoWbH : Montpellier Comédie Club - Juin 2011
|- http://bit.ly/kaSV6U : Stand up set at Up The Creek
`- http://bit.ly/hdKhCy : Rcpp article in JSS


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to