基本クラスのメンバー関数を検出するための SFINAE
C では、SFINAE (置換失敗はエラーではありません) が一般的に、クラス内に特定のメンバー関数が存在する。ただし、SFINAE を使用して継承されたメンバー関数を検出するには、より複雑なアプローチが必要です。
質問で提供されているコードは、この目的で SFINAE を利用しようとしていますが、継承を考慮していません。この制限に対処するために、ここで紹介するソリューションでは別の戦略が採用されています。
Boost ユーザーのスレッドでの議論に触発されて、has_foo テンプレート クラスが定義されています。型チェック メカニズムを利用して、直接メンバー関数と継承されたメンバー関数を区別します。 deduce 関数は、予期されるメンバー関数のシグネチャと一致する型の推定を試みます。推論が成功した場合 (つまり、推論された型のサイズが Yes の場合)、結果フラグは true に設定され、継承されたメンバー関数の存在を示します。
このソリューションをサンプル クラス A、B、に適用します。と C の結果は、 has_foo が B の継承されたメンバー関数を正しく認識することを示しています。
以上がSFINAE を使用して C で継承されたメンバー関数を検出できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。