检测类中特定成员变量的存在
在代码中,检查类中特定成员变量的存在可以是具有挑战性的。这在实现通用算法或使用具有不同成员名称的类时至关重要。
问题陈述:
提供的代码旨在通过检查类模板参数中存在“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
这个解决方案不限于 C 11,并且提供了一个通用方法来检测任何类中的成员变量。
以上是如何可靠地检测C类中特定成员变量的存在?的详细内容。更多信息请关注PHP中文网其他相关文章!