下面的程序計算2上升到n,而不使用任何循環,運行時遞歸或庫函數[pow]。
它使用TEMPLATE METAPROGRAMING技術。2沒有任何循環或遞歸或庫函數n上升到電源
#include <iostream>
using namespace std;
template<int n> struct funStruct
{
enum { val = 2*funStruct<n-1>::val };
};
template<> struct funStruct<0>
{
enum { val = 1 };
};
int main()
{
cout << funStruct<8>::val << endl;
return 0;
}
我在徘徊,我可以使用函數代替結構嗎?
這怎麼不能用遞歸?它發生在編譯時 - 但很明顯,因爲參數作爲模板參數傳遞,所以計算也在編譯時發生。 – tdammers
這個特定的元編程例子的全部重點是2^n在編譯時(遞歸)計算,而不是運行時。 –