gpt4 book ai didi

c++ - 重构大型 C++ 类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:22 24 4
gpt4 key购买 nike

我正在编写一个 nes 模拟器并编写了一个代表 6502 cpu 的类:

class CCpu6502 {
public:
/*....*/
void fetch8();
void fetch16();

void ADC();
void AND();
/* Around 50+ cpu instruction types */
private:
/*register state, jump table definition*/
};

基本上,我有一个跳转表,它接受操作码并执行适当的成员函数——改变 cpu 的内部状态。还有一些其他任务可以确定正确的寻址类型。

我意识到类定义太大,难以解析和测试。但是,将类拆分为单独的类似乎有问题,因为几乎每个函数都会改变 cpu 的内部状态。

我考虑过这样分类指令类型:

class AInstructionHandler {/*...*/};
class CArithmeticInstHandler : public AInstructionHandler{/*...*/};
class CBranchInstHandler : public AInstructionHandler{/*...*/};
/*memory accessors, logical, etc. */

但是,我必须让每个指令处理程序类都成为友元,才能让每个指令处理程序类访问 CPU 的内部状态,这似乎是个坏主意。

我想知道是否有更好的方法来重构一个大类,其中几乎所有方法都会影响对象的状态,或者我的设计是否从一开始就存在缺陷。

谢谢

最佳答案

好吧,如果没有大的逻辑 block 可以分解,那么也许您可以找到更小的 block 来放入它们自己的类中。您提到了 JumpTable,它是自己类的候选对象。也许它可以接受一个操作码并返回一个地址?

然后是 OpCodes 本身,它们可以成为对 6502 的状态进行一些更改的对象。因此,要做到这一点,您可能需要打包CPU 的内部状态。

一旦您开始移除较小的部分,可能会发生哪些其他重构就变得显而易见。

还有一些related answers在可能有帮助的 StackOverflow 上。这里是some additional thoughts来自 Dobb 博士。

关于c++ - 重构大型 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353185/

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