首页 > 后端开发 > C++ > 如何检查 C 模板类中成员变量'x”或'X”是否存在?

如何检查 C 模板类中成员变量'x”或'X”是否存在?

Patricia Arquette
发布: 2024-12-25 08:25:12
原创
374 人浏览过

How Can I Check for the Existence of Member Variables

检查 C 中类成员变量的存在

该问题寻求一种方法来确定特定成员变量(即“x”)是否存在或“X”,在充当模板参数的类中。当使用 MFC CPoint 或 GDI PointF 等类时,此技术特别有用,每个类都使用不同的“x”成员。

建议的解决方案

响应建议两种解决方案:

1。基于宏的解决方案:

此方法依赖于使用 Visual Studio 的预处理器宏:

template<class P> bool Check_x(P p, typename TT<sizeof(&P::x)>::type b = 0) { return true; }
template<class P> bool Check_x(P p, typename TT<sizeof(&P::X)>::type b = 0) { return false; }
登录后复制

但是,此解决方案仅限于 Visual Studio,并且不能在 GNU C 中编译。

2。基于 C 11 的解决方案:

此解决方案利用 C 11 的类型特征:

#include <type_traits>

template <typename T, typename = int>
struct HasX : std::false_type { };

template <typename T>
struct HasX <T, decltype((void) T::x, 0)> : std::true_type { };
登录后复制

此技术通过使用 SFINAE(替换失败不是错误)来检查成员变量。如果成员变量存在,则将调用相应类型的模板特化,从而产生 true 返回值。否则,将选择默认模板,产生错误的返回值。

以上是如何检查 C 模板类中成员变量'x”或'X”是否存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板