当前位置: 代码迷 >> 综合 >> C++类型支持之std::is_array
  详细解决方案

C++类型支持之std::is_array

热度:88   发布时间:2024-03-08 00:08:45.0

std::is_array(C++11) 用于判断一个类型是否为数组,如果为数组,则返回1,否则返回0。

可能实现:


template<class T>
struct is_array: std::false_type {
    };template<class T>
struct is_array<T[]> :std::true_type{
    };template<class T, std::size_t N>
struct is_array<T[N]>: std::true_type{
    };

可以看出该实现是基于模板特化,对于数组类型,继承true_type,否则继承false_type。

实例:

#include <iostream>using namespace std;class A{
    };int main()
{
    cout << std::is_array<int[]>::value << endl;cout << std::is_array<int[3]>::value << endl;cout << std::is_array<const int[3]>::value << endl;cout << std::is_array<int[][3]>::value << endl;cout << std::is_array<int[3][3]>::value << endl;cout << std::is_array<A[]>::value << endl;cout << std::is_array<int>::value << endl;cout << std::is_array<int*>::value << endl;cout << std::is_array<std::array<int,3>>::value << endl;system("PAUSE");
}

运行结果:
运行结果
注意,尽管数组可以退化为指针,但指针并不是数组类型,另外,该工具并不认为C++11引入的std::array是数组类型。

源码见:https://github.com/devsave/TypeTraits