ホームページ > バックエンド開発 > C++ > C クラス内の特定のメンバー変数の存在を確実に検出するにはどうすればよいですか?

C クラス内の特定のメンバー変数の存在を確実に検出するにはどうすればよいですか?

DDD
リリース: 2024-12-21 10:13:18
オリジナル
586 人が閲覧しました

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 になります。それ以外の場合は false になります。

このソリューションは C 11 に限定されず、任意のクラスのメンバー変数を検出するための汎用メソッドを提供します。

以上がC クラス内の特定のメンバー変数の存在を確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート