我正在实现一个类,我有一个使用大量需要声明和初始化的变量的函数。
我希望变量声明不会使函数混乱,并执行以下操作:
doFunction(){
declare();
//Do things with variables declared in declare()
}
void declare(){
//declare lots of variables here
}
这不起作用,因为变量的范围是declare()并且doFunction()看不到。什么是处理这个问题的合理方法?
答案 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仍然可能是正确答案: - )