Я прочитал это blog post о классах и модулях в Rcpp, и я попытался его воссоздать, но у меня проблемы.Использование класса в качестве параметра в конструкторе другого класса
Вот сокращенный вариант кода с поста:
#include <Rcpp.h>
using namespace Rcpp;
class Point {
public:
Point(double x_, double y_) : x(x_), y(y_){}
double x, y ;
} ;
class Shape {
public:
Shape(const Point& center_) : center(center_){}
Point center ;
virtual double area() const { return 0.0 ;}
virtual bool contains(const Point& point) const { return false ; }
} ;
RCPP_MODULE(play){
class_<Point>("Point")
.constructor<double,double>()
.field("x", &Point::x)
.field("y", &Point::y)
;
class_<Shape>("Shape")
.constructor<Point>()
.method("area", &Shape::area)
.method("contains", &Shape::contains)
;
};
Все, что здесь происходит, класс создается точка, а затем используется в качестве параметра в конструктор класса Shape. Но класс Shape не будет принимать класс Point в качестве параметра в конструкторе. Когда я компилирую вышеуказанный код, я получаю ошибку: никакой подходящей функции для вызова «Point :: Point (SEXPREC * &)». Я считаю, что эта ошибка говорит о том, что конструктор для Shape не понимает, как обращаться с классом Point.
Я прочитал главу в учебнике Springer Rcpp
о модулях, и я прочитал виньетку об модулях, но я не верю, что в любом из них есть примеры, когда классы создаются из других классов, как в приведенном выше сообщении блога. Я должен что-то недопонимать, поэтому я был бы признателен, если бы кто-нибудь мог просветить меня.
С уважением
Спасибо! Последующий вопрос: как бы я сделал то же самое для структур? Должен ли я объявить «struct myStruct;», а затем сделать «RCPP_EXPOSED_CLASS (myStruct)» или существует другой макрос для раскрытия структур? – Carl
Тот же макрос ('RCPP_EXPOSED_CLASS') должен отлично работать с' struct'. Насколько я могу судить, макросу просто нужно имя 'class' /' struct' для генерации необходимого шаблона кода ('wrap <>' и 'as <>') для изложения. – nrussell