我“米试图找到一种方法来判断一个类型是在编译时的指针是这样的:检查在编译的时候,如果类型为指针
#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