如何定义一个模板类来提供类型的指针深度/级别?

发布于 2024-10-28 09:54:29 字数 181 浏览 1 评论 0原文

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

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

How can I define a template class which provides an integer constant representing the "depth" of a (pointer) type provided as the input template argument? For example, if the class was called Depth, the following would be true:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆头 2024-11-04 09:54:29
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 };
};
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 };
};
爱,才寂寞 2024-11-04 09:54:29

可以通过递归来完成。

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

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

It could be done via recursion.

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

template<typename T>
struct Depth<T*>
{
    enum { value = Depth<T>::value + 1 };
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文