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

Jonas Rauch jonas.rauch at googlemail.com
Wed Jun 15 13:38:10 CEST 2011


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() }
};

Of course that is not very elegant but works perfectly.

Best regards,
Jonas


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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20110615/a28c8814/attachment.htm>


More information about the Rcpp-devel mailing list