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

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


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