我开始越来越多地使用连续的作用域编写长C ++算法函数,如下所示:
void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
// First block
MyStruct3 intermediate_var3;
{
double temporary_var;
// Functional step 1.1
// Functional step 1.2
intermediate_var3 = ...
}
// Second block
MyStruct4 intermediate_var4;
{
double temporary_var;
// Functional step 2.1
// Functional step 2.2
intermediate_var4 = ...
}
// Final block
{
int temporary_var;
oparam2 = ...
}
}
我开始认为这是澄清功能结构和限制临时变量范围的好方法(例如计数器i
,j
,k
等。我看到这样的范围块在C函数中有意义,以启用新的声明(参见Why enclose blocks of C code in curly braces?)。
在C ++环境中,这是好事还是坏事?
答案 0 :(得分:1)
这是一个明确的标志,您应该将这些单独的块提取到单独的函数中。
MyStruct3 DoSth3(params)
{
double temporary_var;
// Functional step 1.1
// Functional step 1.2
return ...
}
MyStruct4 DoSth4(params)
{
double temporary_var;
// Functional step 2.1
// Functional step 2.2
intermediate_var4 = ...
}
void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
// First block
MyStruct3 intermediate_var3 = DoSth3(params);
// Second block
MyStruct4 intermediate_var4 = DoSth4(params);
int temporary_var;
oparam2 = ...
}
可能会发生,您会担心DoSth3
和DoSth4
是公开的,因为它们应该是my_algorithm 上下文中的私有。在这种情况下,您可以通过以下方式解决它:
class my_algorithm
{
private:
static MyStruct3 DoSth3(params);
static MyStruct4 DoSth4(params);
public:
static void Perform(const MyStruct1 &iparam1, MyStruct2 &oparam2);
};