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

Douglas Bates bates at stat.wisc.edu
Wed Jun 15 14:57:32 CEST 2011


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.

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


More information about the Rcpp-devel mailing list