C でのテンプレート パラメーターに対する制約の強制
C# およびその他の最新のプログラミング言語では、許可されるパラメーターに対する制約を指定してジェネリック型を定義するのが一般的です。種類。そうすることで、コードが特定の基本クラスまたはインターフェイス実装を持つオブジェクト上で動作することを保証できます。
C での制約の使用
C 11 ではネイティブ テンプレートが導入されましたが、制約があるため、C 11 より前のバージョンでも同様の動作を実現する手法があります。 1 つのアプローチは、std::is_base_of で static_assert を利用することです。これにより、テンプレート パラメーターが目的の基本クラスから派生したかどうかについてコンパイル時にチェックを実行できます。
例
次のコード スニペットを考えてみましょう。
<code class="cpp">#include <type_traits> template<typename T> class YourClass { YourClass() { // Compile-time check static_assert(std::is_base_of<BaseClass, T>::value, "type parameter of this class must derive from BaseClass"); // ... } }</code>
この例では、YourClass テンプレートに、static_assert と std::is_base_of 特性を使用してコンパイル時チェックを実行するコンストラクターがあります。指定されたテンプレート パラメーター T が BaseClass 基本クラスから派生していることを検証します。条件が満たされない場合、コードはコンパイルされません。
この手法を利用すると、C 11 C 以前のテンプレート パラメーターに制約を適用して、コードが目的の継承を持つオブジェクトで動作することを保証できます。階層。
以上がC 11 以前でテンプレート パラメータに制約を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。