我目前正在为我的项目设计一些课程,C++
但我遇到了问题。我想创建一个camera
包含所有需要的值(例如转换矩阵)的类,但呈现的函数camera
应该是可交换的。这听起来像是策略模式的常见情况。因此,我创建了一个接口,该接口定义了该接口render-function
并将camera
类 apointer
赋予该接口。问题是render function
需要访问camera
类中的所有数据,因此我给这个函数一个指向camera
类的指针作为参数。它看起来像这样:
#include "ICameraRender.h"
class Camera{
private:
ICameraRender* _cameraRender;
public:
Camera();
Camera(ICameraRender& cameraRender);
~Camera();
void renderCamera(){ _cameraRender->render(this); }
void setCameraRender(ICameraRender& cameraRender);
/..../
};
class ICameraRender{
public:
virtual ~ICameraRender(){
}
//Override me
virtual void render(Camera* camera) = 0;
};
camera->renderCamera()
由于无限循环的责任(调用in ) render-function
,这似乎不是一个优雅的解决方案ICameraRender
。这个问题有更好的解决方案吗?
问候
编辑:
我想出了另一个解决方案。由于对相机数据进行操作的函数只需要访问我认为可以拆分相机类本身的数据。一个名为 Camera 和 CameraModel 的类。最后一个保存所有需要的数据,第一个对其进行操作。因此,我只需将指向 CameraModel 的指针传递给我的函数:
class CameraModel{
private:
/...data.../
public:
/...setter and getter.../
};
class Camera{
private:
CameraModel* _cameraModel;
ICameraRender* _cameraRender;
public:
Camera();
Camera(ICameraRender& cameraRender);
~Camera();
void renderCamera(){ _cameraRender->render(_cameraModel); }
void setCameraRender(ICameraRender& cameraRender);
/..../
};
class ICameraRender{
public:
virtual ~ICameraRender(){
}
//Override me
virtual void render(CameraModel* cameraModel) = 0;
};
现在渲染函数(仅根据用户输入计算相机的新值)不再可以访问 renderCamera 函数。您如何看待这个解决方案?
问候斯坦