如何定义一个模板类,它给出了类型的指针深度/级别?

时间:2011-04-02 01:10:24

标签: c++ templates pointers types

如何定义一个模板类,它提供一个整数常量,表示作为输入模板参数提供的(指针)类型的“深度”?例如,如果该类被称为Depth,则以下情况属实:

Depth<int ***>::value == 3
Depth<int>::value == 0

2 个答案:

答案 0 :(得分:14)

template <typename T> 
struct pointer_depth_impl
{
    enum { value = 0 };
};

template <typename T>
struct pointer_depth_impl<T* const volatile>
{
    enum { value = pointer_depth_impl<T const volatile>::value + 1 };
};

template <typename T>
struct pointer_depth
{
    enum { value = pointer_depth_impl<T const volatile>::value };
};

答案 1 :(得分:4)

可以通过递归来完成。

template<typename T>
struct Depth
{
    enum { value = 0 };
};

template<typename T>
struct Depth<T*>
{
    enum { value = Depth<T>::value + 1 };
};