2012-06-29 93 views
2

在類模板中,如何檢測模板參數是否爲枚舉類型?在類模板中如何檢測模板參數是枚舉類型?

下面是我想要做的簡化示例:http://ideone.com/3CafY。你將如何實現IsTEnum(),以便輸出是正確的?

我覺得應該有一個boost函數來解決這個問題,但是我不允許在我當前的項目中使用boost(也不是標準庫std :: functions)。
儘管如此,我也有興趣知道使用boost或不使用boost(即使解決方案不處理指針或const類型)。

回答

7

您可以爲此使用C++ 11的std::is_enum。你是對的,在這種提升有the same solution。如果你不能使用boost或C++ 11,你總是可以看到靈感的實現。

+0

事實上,我也不能使用C++ 11。感謝您提供boost函數的鏈接,它的實現似乎需要包含其他boost函數(is_arithmetic,is_reference ..)。我有興趣瞭解代碼量方面的「最小實現」。 – wil

+0

我只是看了幾個實現,這是不平凡的。如果你想要一個可移植的,大多數完整的解決方案,你必須從boost或std庫中提取它。 – Zac

+0

有關該主題的討論,請參閱[此處](https://groups.google.com/forum/?fromgroups#!topic/comp.lang.c++.moderated/iYuYR1yAT1s) – Zac

0

如果不能使用C++ 11然後寫:

#include <tr1/type_traits> 
#include <iostream> 
using namespace std; 

int main() { 
    cout << tr1::is_enum<int>::value << "\n"; 
    return 0; 
} 

的命名空間TR1包括從C++ 11可在預標準C中使用的一些++頭文件。

+0

遺憾的是我不能在我的項目中包含。我認爲它使用的C++方言可能是ISO/IEC 14882:1998。 – wil