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

Romain Francois romain at r-enthusiasts.com
Thu Jul 7 15:18:46 CEST 2011


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>  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<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>  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
>>>> | 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
>> 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
> 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