Joh*_*lis 7 c++ refactoring c++11
我怎样才能重构以下C++代码?我在我的程序中使用C++ 11
void f(int a, int b, int c, int d, int e, int f) {
// MAX1..MAX6 are constants, N1..N6 are constants
if( a > MAX1) {
.. code block 1..
}
else if(b > MAX2) {
.. code block 2..
}
else if(c > MAX3) {
.. code block ..
}
else if(d > MAX4) {
.. code block 3 ..
}
else if(e > MAX5) {
.. code block 4 ..
}
else if(f > MAX6) {
.. code block5 ..
}
else if(( a > N1) && ( b > N2)) {
.. code block 6 ..
}
else if(( c > N3) && ( d > N4)) {
.. code block 7 ..
}
else if (( e > N5) && ( f > N6)) {
.. code block 8 ..
}
else if (( a > N1) && ( b > N2) && (d > N4)) {
.. code block 9 ..
}
else if (..some combination of (a > N1) to (f > N6)...) {
// there are more than 30 such combinations in my code
.. code block XX ..
}
else {
.... code block ....
}
Run Code Online (Sandbox Code Playgroud)
函数中最多有 64 个代码块,每个代码块都可以使用匿名函数或命名函数:
my_func_array[64] = {
[CONDITION(1,0,0,0,0,0)] = { codeblock1 },
[CONDITION(0,1,0,0,0,0)] = { codeblock2 },
...
};
Run Code Online (Sandbox Code Playgroud)
该宏基本上会将前 6 个输入连接到一个索引,本质上转换为:
my_func_array[64] = {
[32] = { ... },
[16] = { ... },
};
Run Code Online (Sandbox Code Playgroud)
这意味着您不必按任何特定顺序输入条件......
运行时,您还必须评估所有条件:
int condition = CONDITION(a < MAX1, b < MAX2, c < MAX2, ...);
if (my_func_array[condition])
my_func_array[condition]();
else
{
// this second block should cover all the other cases
int condition2 = CONDITION(a < N1, b < N2, c < N3, ... );
if (my_func_array2[condition2])
my_func_array2[condition2]();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
878 次 |
最近记录: |