我「米試圖找到一種方法來判斷一個類型是在編譯時的指針是這樣的:檢查在編譯的時候,如果類型爲指針
#include <type_traits>
#if std::is_pointer<char*>::value
#pragma message("blah")
#endif
然而,這給」警告C4067:預處理器指令後的意外令牌 - 期待換行符「兩次(我認爲::是什麼讓它混淆了),它不打印等等,當hoover over :: value時,編譯器告訴我它是否爲真,這意味着它是已知在編譯時間所以這應該工作
這是因爲我想能夠做這樣的事情:
T pHead;
#if std::is_pointer<T>::value
pHead= NULL;
#endif
其中,如果它是指針,則爲NULL。它必須是編譯時檢查,因爲如果T是一個結構體,我不能將NULL賦值給它的變量。即下面的代碼將不能編譯當T是一個結構:
T pHead;
if (std::is_pointer<T>::value)
pHead= NULL;
感謝
馬特
我覺得'T'是一個通用的。我懷疑這會起作用。如果'T'是'int *'呢? – 2012-01-08 11:30:52
我將T看作模板參數或typedef。如果是的話,它會起作用。如果它實際上是'int *',我們知道它是一個指針,可以將它設置爲NULL。 – 2012-01-08 11:34:10
@Matt - 如果你有'typedef int * T;'它*不工作。像結構或模板參數一樣。 – 2012-01-08 12:05:21