0
我是模板元編程的新手,但我試圖重構一些矩陣操作代碼以提高速度。特別是,現在我的功能看起來是這樣的:如何使用模板元編程重構此循環?
template<int SIZE> void do_something(matrix A) {
for (int i = 0; i < SIZE; ++i) {
// do something on column i of A
}
}
我看到了一些技巧,使用模板來改寫這個作爲
#define SIZE whatever
template<int COL> void process_column(matrix A) {
// do something on column COL of A
process_column<COL + 1>(A);
}
template<> void process_column<SIZE - 1>(matrix A) {
return;
}
void do_something(matrix A) {
process_column<0>(A);
}
當我這樣做是爲了我的功能,並設置編譯器標誌,以適當的內聯,我看到一個相當不錯的(〜10%)提速。但問題是SIZE是#define
d不是模板參數,我肯定會在我的程序中使用不同的大小。所以我想要類似
template<int COL, int SIZE> void process_column(matrix A) {
// do something on column COL of A
process_column<COL + 1, SIZE>(A);
}
/* HOW DO I DECLARE THE SPECIFIC INSTANCE????
The compiler rightfully complained when I tried this: */
template<int SIZE> void process_column<SIZE - 1, SIZE>(matrix A) {
return;
}
template<int SIZE> void do_something(matrix A) {
process_column<0, SIZE>(A);
}
我該如何聲明特定的實例才能使循環終止?提前致謝!
大,這個工作只用溫和的性能損失。有什麼特別的原因,我不能部分專門化模板功能? – Andrew
@Andrew:你不能部分地專注於他們 - 幾乎只是因爲語言說你不能。您可以閱讀[爲什麼不專門定製功能模板?](http://www.gotw.ca/publications/mill17.htm)。 – Jarod42