gpt4 book ai didi

c++ - 递归策略模式

转载 作者:行者123 更新时间:2023-11-30 01:25:15 24 4
gpt4 key购买 nike

我正在为我在 C++ 中的项目设计一些类此刻,但我遇到了问题。我想创建一个 camera包含所有需要的值(例如转换矩阵)的类,但是呈现 camera 的函数应该是可以交换的。这听起来像是策略模式的常见情况。因此,我创建了一个定义 render-function 的接口(interface)并给出了 camera a类pointer到这个界面。问题是 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() 中的 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;
};

现在,渲染函数(仅根据用户输入计算相机的新值)不再有权访问渲染相机函数。您如何看待这个解决方案?

问候斯坦

最佳答案

你是对的,这看起来确实是个糟糕的设计。 :)

我不明白为什么相机渲染需要访问相机。我相信你可以传递其他东西作为参数。渲染不需要访问所有相机成员,因此您可以只传递它需要的成员(并且,如果它们很多,将它们包装在结构 CameraConfig 或类似的东西中) .

如果不同的渲染需要不同的参数,您可以使用 ICameraConfig 创建一个单独的层次结构。

关于c++ - 递归策略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com