C では、テンプレート推論は、指定された引数に基づいてテンプレート関数またはクラスのジェネリック型引数を推論するメカニズムです。この機能により、より簡潔でタイプセーフなコードが可能になります。
次のコード スニペットを考えてみましょう:
<code class="cpp">class GC { public: template <typename T> static GCPtr<T> Allocate(); };</code>
ここで、Allocate 関数は、次の型のオブジェクトにメモリを割り当てる汎用関数です。 T. この関数を使用するには、以下に示すように、呼び出し元は型引数を明示的に指定する必要があります:
<code class="cpp">GCPtr<A> ptr1 = GC::Allocate<A>(); GCPtr<B> ptr2 = GC::Allocate<B>();</code>
Allocate の戻り値の型に基づいて明示的な型引数を削除できるかどうかという疑問が生じます。関数。残念ながら、C では戻り値の型のみに基づいてテンプレート推定を実行することはできません。
ただし、同様の効果を達成する別の方法があります。一般的なアプローチの 1 つは、型を自動的に推測するヘルパー関数を使用することです。
<code class="cpp">// Helper function template <typename T> void Allocate(GCPtr<T>& p) { p = GC::Allocate<T>(); } int main() { GCPtr<A> p = 0; Allocate(p); }</code>
このアプローチでは、呼び出し元は GCPtr オブジェクトへの参照を渡すだけでよく、ヘルパー関数が型を推測して呼び出します。適切な Allocate 関数。
C 11 以降のバージョンでは、auto キーワードを使用して型推論をさらに簡素化できます。
<code class="cpp">auto p = GC::Allocate<A>(); // p is of type GCPtr<A></code>
ヘルパー関数または auto キーワードを活用することで、テンプレート推論の利点を維持しながら、目的の機能を実現することが可能です。
以上がテンプレートの推定は C の戻り値の型のみに基づいて行うことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。