首页 >后端开发 >C++ >如何可靠地检测C类中特定成员变量的存在?

如何可靠地检测C类中特定成员变量的存在?

DDD
DDD原创
2024-12-21 10:13:18586浏览

How Can I Reliably Detect the Existence of Specific Member Variables in a C   Class?

检测类中特定成员变量的存在

在代码中,检查类中特定成员变量的存在可以是具有挑战性的。这在实现通用算法或使用具有不同成员名称的类时至关重要。

问题陈述:

提供的代码旨在通过检查类模板参数中存在“x”(或“X”)和“y”(或“Y”)。这在 MFC 的 CPoint 或 GDI 的 PointF 等成员变量名称不同的类中特别有用。

原始解决方案对“x”和“X”使用不同的模板化函数。然而,这导致了 Visual Studio 中的编译问题。

通用解决方案:

要实现通用解决方案,我们可以利用 SFINAE(替换失败不是错误) 。下面修改后的代码演示了这种方法:

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

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

此代码通过尝试替换“decltype(...)”中的“T::x”来利用 SFINAE。如果“T::x”有效,则 HasX 的特化为:将被使用,导致 HasX::value 为 true;

这个解决方案不限于 C 11,并且提供了一个通用方法来检测任何类中的成员变量。

以上是如何可靠地检测C类中特定成员变量的存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn