在類模板中,如何檢測模板參數是否爲枚舉類型?在類模板中如何檢測模板參數是枚舉類型?
下面是我想要做的簡化示例:http://ideone.com/3CafY。你將如何實現IsTEnum(),以便輸出是正確的?
我覺得應該有一個boost函數來解決這個問題,但是我不允許在我當前的項目中使用boost(也不是標準庫std :: functions)。
儘管如此,我也有興趣知道使用boost或不使用boost(即使解決方案不處理指針或const類型)。
在類模板中,如何檢測模板參數是否爲枚舉類型?在類模板中如何檢測模板參數是枚舉類型?
下面是我想要做的簡化示例:http://ideone.com/3CafY。你將如何實現IsTEnum(),以便輸出是正確的?
我覺得應該有一個boost函數來解決這個問題,但是我不允許在我當前的項目中使用boost(也不是標準庫std :: functions)。
儘管如此,我也有興趣知道使用boost或不使用boost(即使解決方案不處理指針或const類型)。
您可以爲此使用C++ 11的std::is_enum。你是對的,在這種提升有the same solution。如果你不能使用boost或C++ 11,你總是可以看到靈感的實現。
如果不能使用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中使用的一些++頭文件。
遺憾的是我不能在我的項目中包含
事實上,我也不能使用C++ 11。感謝您提供boost函數的鏈接,它的實現似乎需要包含其他boost函數(is_arithmetic,is_reference ..)。我有興趣瞭解代碼量方面的「最小實現」。 – wil
我只是看了幾個實現,這是不平凡的。如果你想要一個可移植的,大多數完整的解決方案,你必須從boost或std庫中提取它。 – Zac
有關該主題的討論,請參閱[此處](https://groups.google.com/forum/?fromgroups#!topic/comp.lang.c++.moderated/iYuYR1yAT1s) – Zac