2011-09-05 44 views
4

通過使用類型特徵,我可以發現一個類型是整數還是一個指針(以及更多)。是否也可以找出傳遞的指針是否是整型數據類型(int, float ,char)而不是對象?我可以通過類型特徵確定指針是否爲整型:

編輯:除了Armen's答案,如果有人使用洛基庫而不是加速的remove pointer功能類似於TypeTraits::PointeeType

+0

'整型數據類型(int,float,char)'?浮動也是不可或缺的? – Nawaz

+1

浮點數不是整數,並且int,float和char類型的對象都是,也是對象。 – jalf

回答

4
boost::is_pointer<T>::value && 
boost::is_integral<boost::remove_pointer<T>::type>::value 

順便說一句float組是不完整。您可能需要is_arithmetic

+1

如果您無法訪問Boost(或者如果Boost實現使用很多您不想去的機器),您可以從std :: numeric_limits :: is_integer'開始並向外運行。也就是說,從某種程度上來說,避免Boost中的一些事情,在這個答案中使用的東西並不是真正的東西,因爲它們即將在C++ 0x中出現。 –

0
template <typename T> 
struct IsPointerToInt { 
    static const bool value = false; 
}; 

template <> 
struct IsPointerToInt<int *> { 
    static const bool value = true; 
}; 

// ... other specializations for the types you are interested in ... 
+1

我不認爲這回答了這個問題。問題是:如何確定T是否是指向* integral *類型的指針?你的特徵告訴我T是否是一般指針。 –

+0

你說得對,我誤讀了。 –

相關問題