gpt4 book ai didi

C++ - 将代码实现分成不同的部分

转载 作者:行者123 更新时间:2023-11-28 03:57:51 24 4
gpt4 key购买 nike

问题图(有点抽象,但回答这个问题对我的实际应用有帮助):

所以,我有一些可以在屏幕上呈现的对象的抽象父类(super class)。我们称它为 IRenderable

struct IRenderable {
// (...)
virtual void Render(RenderingInterface& ri) = 0;
virtual ~IRenderable() { }
};

假设我还有一些其他派生自 IRenderable 的对象,例如

到目前为止一切顺利。我添加了一些 CatDog 特定方法,例如 SeekForWhiskas(...)Bark(...)。之后我为它们添加了特定的 Render(...) 方法,所以我的代码看起来是这样的:

class Cat : public IRenderable {
public:
void SeekForWhiskas(...) {
// Implementation could be here or moved
// to a source file (depends on me wanting
// to inline it or not)
}

virtual void Render(...) {
// Here comes the rendering routine, that
// is specific for cats
SomehowDrawAppropriateCat(...);
}
};

class Dog : public IRenderable {
public:
void Bark(...) {
// Same as for 'SeekForWhiskas(...)'
}

virtual void Render(...) {
// Here comes the rendering routine, that
// is specific for dogs
DrawMadDog(...);
}
};

然后我可以在其他地方绘制调用适当渲染例程的方式:

IRenderable* dog = new Dog();
dog->Render(...);

我的问题是关于此类代码的逻辑包装。

我想分解代码,它对应于当前对象的渲染及其自己的方法(本例中为 RenderBark),所以我的类实现不会变得一团糟(想象一下,我有 10 个方法,例如 Bark,当然我的 Render 方法不适合他们的公司,并且会是很难找到)。

制作我想要的东西的两种方法(据我所知)是:

  • 制作看起来像 RenderCat(Cat& cat, RenderInterface* ri) 的适当例程,将它们加入 render 命名空间,然后类中的函数看起来喜欢virtual void Render(...) { RenderCat(*this, ...); },但这显然是愚蠢的,因为我将无法访问 Cat 的私有(private)成员,并且将这些函数加好友看起来完全是设计灾难。

  • 使用访问者模式,但这也意味着我必须重新构建我的应用程序的设计,而且从一开始就让我的代码复杂化似乎是一种不恰当的方法。

有什么好主意吗? :)

最佳答案

我接触图形编程时的理解和记忆是Visitor确实很合适。

关于C++ - 将代码实现分成不同的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702167/

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