「式 SFINAE」とは何ですか?
「式 SFINAE」(置換失敗はエラーではありません) という用語は、 decltype 内で式を使用する機能を活用して、式の有効性に基づいてテンプレート引数の選択的な置換を可能にする C テンプレート。
実際の SFINAE 式
式SFINAE では、関数テンプレートは、特定のテンプレート引数が使用された場合にのみ有効な型に評価される decltype 式を使用して定義されます。置換の結果、無効な型または式が生成された場合、関数テンプレートの特殊化はオーバーロード解決時の考慮から事実上除外されます。
次のコード例を考えてみましょう。
template <class T> auto f(T t1, T t2) -> decltype(t1 + t2);
このテンプレートは関数を定義します。 f は 2 つの引数を取り、decltype(t1 t2) から派生した型を返します。加算式 t1 t2 が指定されたテンプレート引数に対して有効な場合、関数の特殊化が有効になります。それ以外の場合、事実上無効になります。
VC および GCC の制限
Expression SFINAE は C 11 標準の一部ですが、Microsoft Visual C (VC) での実装GCC の以前のバージョンは制限されています。 VC では、メンバー関数ポインターを含む式など、特定の式タイプに対して確実に動作しない可能性があります。同様に、GCC 4.7.1 では、式 SFINAE の処理に制限があります。
使用法
式 SFINAE は、条件付きで有効にする必要がある特性クラスやその他のシナリオでよく使用されます。または、式の有効性に基づいてテンプレートの特殊化を無効にします。この手法は、明示的なテンプレート引数制約に依存する場合と比較して、より正確でタイプセーフな特殊化アプローチを提供します。
以上が「式 SFINAE」は C テンプレートでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。