C のテンプレート制約
テンプレートを使用してさまざまなデータ型のコードを一般化することは、C では一般的な方法です。ただし、一部のシナリオでは、テンプレート パラメーターとして使用できる型に制約を課す必要があります。この記事では、C 11 より前の現在の C 標準でこれを実現する方法について説明します。
制約の強制
C では、C# とは異なり、簡単な方法はありません。テンプレートパラメータに制約を適用します。ただし、同様の機能を実現できる手法もあります。
std::is_base_of を使用した静的アサーション
C 11 の導入により、static_assert を次のものと組み合わせて使用できるようになりました。 std::is_base_of は、テンプレート パラメーターのコンパイル時チェックを実行します。たとえば、次の例を考えてみましょう。
<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>
この手法では、コンパイル時にテンプレート パラメーター T が BaseClass の派生クラスである必要があります。この条件が満たされない場合、コンパイラはコンパイル時にエラーを生成し、無効なテンプレート パラメータを使用してコードを実行できなくなります。
以上がC 11 より前の C では、テンプレート パラメーターに制約を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。