檢查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中文網其他相關文章!