[Rcpp-devel] Rcpp modules: Derived class - exposing method from base class?
Romain Francois
romain at r-enthusiasts.com
Fri Jul 8 14:23:16 CEST 2011
Le 08/07/11 14:22, Jonas Rauch a écrit :
> Hi Romain,
>
> glad to hear that! Although I solved my original problem with the
> workaround described, I would be happy to do some testing when you have
> a solution.
Noted :-)
> On Fri, Jul 8, 2011 at 2:00 PM, Romain Francois
> <romain at r-enthusiasts.com <mailto:romain at r-enthusiasts.com>> wrote:
>
> 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
> <mailto: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
> <mailto: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 <mailto: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
> <mailto:Rcpp-devel at lists.r-forge.r-project.org>
> |
> https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
> <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
> <mailto:Rcpp-devel at lists.r-forge.r-project.org>
> https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
> <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
> <mailto:Rcpp-devel at lists.r-forge.r-project.org>
> https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
> <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 <tel:%2B33%280%29%206%2028%2091%2030%2030>
> http://romainfrancois.blog.__free.fr
> <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
>
>
> _________________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-__project.org
> <mailto:Rcpp-devel at lists.r-forge.r-project.org>
> https://lists.r-forge.r-__project.org/cgi-bin/mailman/__listinfo/rcpp-devel
> <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