Pasar la instancia 'R' de Rinside como parámetro entre clases/métodos
Pregunta
He estado usando RCPP y Rinside, para integrar Riñonal y C ++. Tenemos una arquitectura C ++ compleja pero bien diseñada, y me resulta difícil acceder a R desde solo 1 función. ¿Es posible pasar el R
instancia a diferentes clases / funciones, para obtener un diseño más OOP? En caso afirmativo, ¿hay algún ejemplo?
Para elaborar la consulta, quiero decir que algo como esto,
void foo(RInside& R0, int& x0)
{
R0.assign(x0,"totalSum");
}
void foo2(RInside& R0, int& y0)
{
R0.assign(y0,"temp");
R0.parseEvalQ("totalSum = totalSum + temp");
}
int main(int argc, char *argv[])
{
RInside R(int argc, char *argv[]);
int x=10, y = 11;
foo(R,x);
foo2(R,y);
return 0;
}
Lo que estoy notando actualmente es que cada llamada a Foo, probablemente crea una nueva instancia de Rinside.
Gracias - Egon
Solución
Sí, y como escribí antes al Lista de Devel RCPP (que debe seguir si le importa RCPP y Rinside) Acabo de agregar un ejemplo a Rindeo que lo incrusta dentro QT.
I Instantiante r in in in in in main()
y luego pase una referencia a este objeto a la clase que lo usa. Eso parece un modelo adecuado, ya que debemos asegurarnos de que solo una instancia R se esté ejecutando (sin que R no sea multiproceso, etc., si necesita más instancias, considere Rser.
Este ejemplo es Ahora en SVN y se ve así en mi caja:
Me gusta bastante, ya que te permite tocar con mezclas, extender la ubicación central de ambos sorteos, etc. y ver en qué ancho de banda ya no diferencias entre dos jorobas de la densidad estimada.