SFINAE を使用して C で継承されたメンバー関数を検出できますか?

Linda Hamilton
リリース: 2024-11-05 13:37:02
オリジナル
191 人が閲覧しました

Can SFINAE Be Used to Detect Inherited Member Functions in C  ?

基本クラスのメンバー関数を検出するための SFINAE

C では、SFINAE (置換失敗はエラーではありません) が一般的に、クラス内に特定のメンバー関数が存在する。ただし、SFINAE を使用して継承されたメンバー関数を検出するには、より複雑なアプローチが必要です。

質問で提供されているコードは、この目的で SFINAE を利用しようとしていますが、継承を考慮していません。この制限に対処するために、ここで紹介するソリューションでは別の戦略が採用されています。

Boost ユーザーのスレッドでの議論に触発されて、has_foo テンプレート クラスが定義されています。型チェック メカニズムを利用して、直接メンバー関数と継承されたメンバー関数を区別します。 deduce 関数は、予期されるメンバー関数のシグネチャと一致する型の推定を試みます。推論が成功した場合 (つまり、推論された型のサイズが Yes の場合)、結果フラグは true に設定され、継承されたメンバー関数の存在を示します。

このソリューションをサンプル クラス A、B、に適用します。と C の結果は、 has_foo が B の継承されたメンバー関数を正しく認識することを示しています。

以上がSFINAE を使用して C で継承されたメンバー関数を検出できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!