(請參閱末尾的澄清說明)不必用bools和模板參數列出所有可能性
我試圖使用bool's作爲模板參數。我希望能夠寫這樣的事情
#include <iostream>
#include <string>
template<bool a, bool b>
void foo() {
printf("%d %d\n", (int)a, (int)b);
}
int main()
{
int c = 2 ;
c += 2 % 4 - 3 + 1 ;
bool a = c % 2 == 0 ;
bool b = c % 2 == 1 ;
foo<a, b>();
}
但是,正如所料,我有一個
16:9: error: the value of 'a' is not usable in a constant expression 14:10: note: 'bool a' is not const
我當然可以做類似
#include <iostream>
#include <string>
template<bool a, bool b>
void foo() {
printf("%d %d\n", (int)a, (int)b);
}
int main()
{
int c = 2 ;
c += 2 % 4 - 3 + 1 ;
bool a = c % 2 == 0 ;
bool b = c % 2 == 1 ;
if(a) {
if(b) {
foo<true,true>();
} else {
foo<true,false>();
}
} else {
if(b) {
foo<false,true>();
} else {
foo<false,false>();
}
}
}
但它的有點討厭。由於a和b都是bools,有沒有辦法不必明確列出所有可能性?編譯器能夠自行解決這個問題嗎?
編輯:澄清:我瞭解模板是編譯時間「變量」。我的問題是,編譯器能夠自動生成所有函數,基於bool是真/假的事實(所以它是值的一個「範圍」,這是在某種意義上使用模板所需的),以及然後添加所需的「管道」,以便在運行時選擇正確的功能。
謝謝,
模板是在編譯時決定,但你要選擇在運行時執行。因此,模板可能不是你想要的。 – pingul
我同意。我的確是這樣的,因爲它是一個布爾(無論是真的還是假的,沒有別的),也許編譯器可以根據可能性自動生成所需的函數。 – leo
我明白,從編譯器中可能有點太多了,但是:-) – leo