On 14 September 2011 at 14:08, Douglas Bates wrote: | I discovered by accident that I can create an external pointer (Xptr) | object to an instance of a subclass and use it as if it were a pointer | to an instance of the class. | | To be specific, the parent class is lmResp and the subclass is | glmResp. A few of the methods in the lmResp class are overridden in | the definition of the glmResp class but most aren't. So, for example, | the methods to set and get the offset vector for a glmResp instance | are inherited from the lmResp class. | | I create an instance of a glmResp and return an external pointer to | the instance to R where it is stored as a field in a reference class | object. I then use this external pointer to call methods on the C++ | class instance. | | Without being aware of it I passed the external pointer to the glmResp | as a pointer to an lmResp object when invoking an inherited method. | When I did become aware that I was doing this, I was pleasantly | surprised that it had worked. | | In some way I think this is legitimate in that, IIRC, a pointer to an | instance of a subclass can be used as a pointer to an instance of the | parent class. | | So the purpose of this posting is to ask if I am correct that this | should be expected to work or should I expect that on some exotic | compilers this will suddenly blow up on me?
In C++, it should work, it uses basic 'is-a' relationship (a la Meyers) -- see the 'Pizza' example here: http://en.wikibooks.org/wiki/C++_Programming/Code/Design_Patterns#Factory_Method But then you knew that already as evidenced by your (awesome!) lm() example in RcppEigen. So I am not sure I got your question... Also, there was a gotcha, a thing to look out for, and I can't of course remember what it was. I think you have to be careful in terms of casting / accessing between class and subclass. In Rcpp, it should work just the same as the XPtr just gets passed around and then cast with C++ rules, so back to the above. But again, I may have missed your question entirely... Dirk -- New Rcpp master class for R and C++ integration is scheduled for San Francisco (Oct 8), more details / reg.info available at http://www.revolutionanalytics.com/products/training/public/rcpp-master-class.php _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel