处理大量变量声明

时间:2012-11-01 13:02:29

标签: c++ variables scope

我正在实现一个类,我有一个使用大量需要声明和初始化的变量的函数。

我希望变量声明不会使函数混乱,并执行以下操作:

doFunction(){
  declare();

  //Do things with variables declared in declare()
}
void declare(){
  //declare lots of variables here
}

这不起作用,因为变量的范围是declare()并且doFunction()看不到。什么是处理这个问题的合理方法?

3 个答案:

答案 0 :(得分:2)

由于您声明的每个变量都必须赋值,因此您应该将声明与初始化相结合。换句话说,而不是

int x;
double y;
std::string z;
x = 1;
y = 2.0;
z = "3";

这样做:

int x = 1;
double y = 2.0;
std::string z("3");

这就像你可以用本地推动这种方法一样:声明变量是函数体的一个重要部分,你不能(并且可以说,不应该)将它移动到远程位置。

您还可以将成员函数移动到嵌套的私有类中,将局部变量移动到类中,然后在那里进行计算:

class specialCalc {
    int x;
    double y;
    std::string z;
    specialCalc() : x(1), y(2.0), z("3") {}
public:
    int calculate() {
        ...
    }
};

void doFunction() {
     specialCalc calc;
     cout << calc.calculate() << endl;
}
PS:我故意不提基于预处理器的解决方案,因为它们会对可读性产生负面影响。

答案 1 :(得分:1)

我并不是在鼓吹这个,但是:

struct Declare
{
    int x;
    float y;
    char z;
    vars() :x(1),y(3.14),z('z') {}
};

void doFunction()
{
    Declare vars;
    // use vars.x, vars.y and vars.z as your variables
}

答案 2 :(得分:0)

您有多种选择:

1)克服它。如果你需要很多变量,你需要承担他们需要在某处声明的事实。

2)将它们作为成员变量放入类或结构中,这样你就可以在.h文件中声明它们,它们在.C / .cpp文件中是不可见的。

3)将它们聚合成一个数组,并仅声明数组并在for()循环或其他内容中初始化它们。这真的只有当它们都是类似的类型并且你不做愚蠢的事情,如“索引4”是我的“反对此对象”,而“索引5”是我的“我要打印到的东西”屏幕“然后你松开了与变量本身相关的名称,这在以后(当然)阅读代码时非常有用。

4)将它们放在其他地方的定义语句中:

#define MYVARS int a; char b[1024]; ...

void funstuff() {
    MYVARS
}

5)修改IDE,以便在查看代码时隐藏/折叠变量声明。

请注意,在所有这些选择中,数字1仍然可能是正确答案: - )