檢測類別中特定成員變數的存在
在程式碼中,檢查類別中特定成員變數的存在可以是具有挑戰性的。這在實作通用演算法或使用具有不同成員名稱的類別時至關重要。
問題陳述:
提供的程式碼旨在透過檢查類別範本參數中存在「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中文網其他相關文章!