我正在从事性能至关重要的项目。该应用程序正在处理大量数据。代码是用C++编写的,我需要做一些更改。
给出了以下代码(这不是我的代码,我将其简化为最小):
void process<int PARAM1, int PARAM2>() {
// processing the data
}
void processTheData (int param1, int param2) { // wrapper
if (param1 == 1 && param2 == 1) { // Ugly looking block of if's
process<1, 1>();
else if(param1 == 1 && param2 == 2) {
process<1, 2>();
else if(param1 == 1 && param2 == 3) {
process<1, 3>();
else if(param1 == 1 && param2 == 4) {
process<1, 4>();
else if(param1 == 2 && param2 == 1) {
process<2, 1>();
else if(param1 == 2 && param2 == 2) {
process<2, 2>();
else if(param1 == 2 && param2 == 3) {
process<2, 3>();
else if(param1 == 2 && param2 == 4) {
process<2, 4>();
} // and so on....
}
以及主要功能:
int main(int argc, char *argv[]) {
factor1 = atoi(argv[1]);
factor2 = atoi(argv[2]);
// choose some optimal param1 and param2
param1 = choseTheOptimal(factor1, factor2);
param2 = choseTheOptimal(factor1, factor2);
processTheData(param1, param2); //start processing
return 0;
}
希望代码看起来很清楚。
功能:
-
process是处理数据的核心功能,
-
处理数据是 process 函数的包装。
参数的值数量有限(param1 and param2) 需要(假设大约 10 x 10)。
的价值观param1 and param2在执行前未知。
如果我简单地重写process函数,因此它使用函数参数而不是模板常量(意味着进程(int PARAM1,int PARAM2)) 那么处理速度大约慢 10 倍。
由于上述PARAM1 and PARAM2必须是常数process功能。
有没有什么聪明的方法可以摆脱这个丑陋的 if 块位于处理数据功能?