[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