首頁 > 後端開發 > C++ > 如何可靠地偵測C類中特定成員變數的存在?

如何可靠地偵測C類中特定成員變數的存在?

DDD
發布: 2024-12-21 10:13:18
原創
630 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板