我可以通过类型特征确定指针是不是为整数类型吗?

Posted

技术标签:

【中文标题】我可以通过类型特征确定指针是不是为整数类型吗?【英文标题】:Can I determine whether a pointer is of integral type via type traits?我可以通过类型特征确定指针是否为整数类型吗? 【发布时间】:2011-09-05 18:14:36 【问题描述】:

通过使用类型特征,我可以找出类型是整数还是指针(等等)。是否也可以查明被传递的指针是否是整数数据类型(int、float、char)而不是对象?

编辑:除了Armen's的回答,如果有人使用LOKI库而不是Boost,remove pointer的功能类似于TypeTraits::PointeeType

【问题讨论】:

integral data type (int,float,char)?浮动也是不可或缺的吗? Float 不是整数,int、float 和 char 类型的对象也是对象。 【参考方案1】:
boost::is_pointer<T>::value &&
boost::is_integral<boost::remove_pointer<T>::type>::value

顺便说一句,float 不是整数。你可能需要is_arithmetic

【讨论】:

如果您无法访问 Boost(或者如果 Boost 实现使用了很多您不想靠近的机器),您可以从 std::numeric_limits&lt;T&gt;::is_integer 开始并向外工作.也就是说,在某种程度上,避免 Boost 中的一些东西是值得的,这个答案中使用的东西实际上并不在其中,因为它们很快就会在 C++0x 中出现。【参考方案2】:
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 ...

【讨论】:

我认为这不能回答问题。问题是:如何确定 T 是否是指向 integral 类型的指针?一般来说,你的特征告诉 T 是否是一个指针。

以上是关于我可以通过类型特征确定指针是不是为整数类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

(int *)0 是空指针吗?

C++:在编译时确定给定整数类型的整数转换等级?

void及void指针介绍

可以将任何原始类型传递给需要指针的函数吗?

我可以将 nullptr 转换为其他指针类型吗?

我应该使用哪个 *_cast 将任意整数类型指针转换为 char 指针?