//////////////////////////////////////////////////////////////////////////
// C++ templates meta programming
template<bool, typename T1, typename T2>
struct If
{
typedef T1 type;
};
template<typename T1, typename T2>
struct If<false, typename T1, typename T2>
{
typedef T2 type;
};
template<int n>
struct Factorial_exception
{
enum {Value = -1};
};
template<int n>
struct _Factorial
{
enum { Value=n*_Factorial<n-1>::Value};
};
template<>
struct _Factorial<0>
{
enum { Value=1};
};
// 最終結果
template<int n>
struct Factorial
{
enum { Value = If< n<1, Factorial_exception<n>/*小於1時階乘爲-1 */, _Factorial<n> >::type::Value };
};
使用例舉:
int i = Factorial<-2>::Value; // 該語句對應編譯之後的彙編代碼爲: mov dword ptr [i],0FFFFFFFFh
amazing?
利用模板編譯期計算階乘
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
編譯期判斷類型之間是否可以convert
zongshenglee
2018-08-27 18:25:04
我所知道的Move語義與完美轉發
zongshenglee
2018-08-27 18:25:04
模擬static_assert
zongshenglee
2018-08-27 18:25:04
STL 源碼剖析
zongshenglee
2018-08-27 18:25:04
關於std::remove_if
zongshenglee
2018-08-27 18:25:04
從今天起,記錄在這
zongshenglee
2018-08-27 18:25:04
幾道題
zongshenglee
2018-08-27 18:25:00
C風格文件操作 與 fstream的性能差距
zongshenglee
2018-08-27 18:25:00
VC_MFC串口通信編程詳解
贝壳紫铃
2018-08-27 11:50:32
在MATLAB下創建COM組件以及環境變量的設置
贝壳紫铃
2018-08-27 11:50:30
VC和MATCOM混合編程相關筆記集
贝壳紫铃
2018-08-27 11:50:30
存儲16進制數據的字節數組BYTE與字符串之間的互換
贝壳紫铃
2018-08-27 11:50:30
CString中Format函數與格式
贝壳紫铃
2018-08-27 11:50:30
VC++常用數據類型及其操作詳解
贝壳紫铃
2018-08-27 11:50:26