[Rcpp-devel] Rcpp modules: Derived class - exposing method from base class?

Romain Francois romain at r-enthusiasts.com
Fri Jul 8 14:23:16 CEST 2011


Le 08/07/11 14:22, Jonas Rauch a écrit :
> Hi Romain,
>
> glad to hear that! Although I solved my original problem with the
> workaround described, I would be happy to do some testing when you have
> a solution.

Noted :-)

> On Fri, Jul 8, 2011 at 2:00 PM, Romain Francois
> <romain at r-enthusiasts.com <mailto:romain at r-enthusiasts.com>> wrote:
>
>     Le 07/07/11 15:18, Romain Francois a écrit :
>
>         Le 15/06/11 14:57, Douglas Bates a écrit :
>
>             On Wed, Jun 15, 2011 at 6:38 AM, Jonas
>             Rauch<jonas.rauch at googlemail.__com
>             <mailto:jonas.rauch at googlemail.com>> 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.
>
>
>     This is now on a background thread in my head so that I can have
>     dreams/nightmares about it. I failed a few times yesterday evening
>     and this morning, but I can feel I'm getting closer to at least know
>     how to do it.
>
>
>                 On Wed, Jun 15, 2011 at 7:16 AM, Jonas
>                 Rauch<jonas.rauch at googlemail.__com
>                 <mailto:jonas.rauch at googlemail.com>>
>                 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<edd at debian.org <mailto:edd at debian.org>>
>                     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
>                         | Rcpp-devel at lists.r-forge.r-__project.org
>                         <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>                         |
>                         https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
>                         <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
>                 Rcpp-devel at lists.r-forge.r-__project.org
>                 <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>                 https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
>                 <https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel>
>
>
>             _________________________________________________
>             Rcpp-devel mailing list
>             Rcpp-devel at lists.r-forge.r-__project.org
>             <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>             https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
>             <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 <tel:%2B33%280%29%206%2028%2091%2030%2030>
>     http://romainfrancois.blog.__free.fr
>     <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
>     Rcpp-devel at lists.r-forge.r-__project.org
>     <mailto:Rcpp-devel at lists.r-forge.r-project.org>
>     https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
>     <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




More information about the Rcpp-devel mailing list