检查 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中文网其他相关文章!