首頁 >後端開發 >C++ >如何檢查 C 模板類別中成員變數「x」或「X」是否存在?

如何檢查 C 模板類別中成員變數「x」或「X」是否存在?

Patricia Arquette
Patricia Arquette原創
2024-12-25 08:25:12386瀏覽

How Can I Check for the Existence of Member Variables

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn