我正在处理性能至关重要的项目。该应用程序正在处理大量的数据。代码是用C++编写的,我需要做一些修改。优化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;
}
希望的代码看起来清晰。
的功能:
- 过程是处理数据的核心功能,
- processTheData是处理功能的包装。
还有就是PARAMS(参数1 和参数2)取值的数量有限(比方说,约10×10)。
值param1和param2在执行前不知道。
所以它使用该函数的参数,而不是模板常数如果我简单地重写过程功能(装置过程(INT PARAM1,INT PARAM2))则处理大约慢10倍。
由于所述PARAM1和PARAM2以上的必须过程函数的恒定。
有没有什么聪明的方法摆脱这个丑陋的块如果位于processTheData函数?
简而言之:没有没有。当然,你可以重构它,以便以其他方式丑陋。也许它可以用一些宏清理。但这是C++的基础。有些地方需要生成所有这些代码,以便优化,并有条件地执行它。结束。 –
出于好奇,如果你使参数为'const',它有帮助吗? – NathanOliver
不幸的是const不起作用。我在想metaprogamming解决方案,但我没有经验。 – nosbor