gpt4 book ai didi

c++ - 重构大型 case 语句、externs、static locals

转载 作者:行者123 更新时间:2023-11-28 00:30:40 25 4
gpt4 key购买 nike

我正在尝试进行一些重构,并希望找到前进的最佳路径。

我有

  myonce{
static int i //for operation 1
switch(commandid) {
case 1: operation 1
i = 1;
...

其中 myonce 是一个在循环中调用的函数。这不是我的代码,我正在努力让它变得更好。操作 1(或每个案例)是一系列命令,我想将它们放在自己的翻译单元中(每个文件一个函数)。

由于 myonce 在循环中运行,原作者有许多静态变量用于保持状态,其中一些状态集用于多个操作。请注意,这些不是静态文件范围,它们是静态 block 范围。

为简单起见,作为概念证明,我想知道以下是否可行。考虑使用一组静态变量的 1 个操作。

主要.cpp

myonce {
static int i //for op 1
switch(commandid) {
case 1: operation1();

操作1.cpp

extern int i;
void operation1() {
i = 1;
}

在使用相同状态集的多个操作的情况下,我会制作一个 header 以将它们全部声明为外部。

目前这个文件的编译是按分钟计算的,我的首要目标是把它分解成更小的编译单元,让作者可以更自由地工作。这种重构将花费很长时间,但我提到这一点是为了解释我采用这种方法的动机。

我知道其他翻译单元(其他文件中的 extern)无法访问静态文件范围变量,因此我想区分这不是我正在处理的情况。我现在不知道的是,我应该在哪里声明 operation1() 到 main,应该是

static int i
extern void operation1();

所以 int 被声明为对函数可见?

我将不胜感激这方面的任何指示。谢谢。

最佳答案

将状态变量放入结构中。将此结构传递给每个函数。

例子。

// foo.h
struct TheState
{
int x;
char *y;
// ...
};

void func1(TheState &);
void func2(TheState &);

// main.cc
#include "foo.h"

void main_loop()
{
TheState the_state; // initialize this however you want

for (;;)
{
if ( blah) func1(the_state);
else func2(the_state);
}
}

// func1.cc
#include "foo.h"

void func1(TheState &the_state)
{
++the_state.x;
}

关于c++ - 重构大型 case 语句、externs、static locals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023384/

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