我正在處理性能至關重要的項目。該應用程序正在處理大量的數據。代碼是用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