C スタイルの文字列をテンプレート引数として使用する
C では、テンプレート引数はジェネリック関数またはクラスの型または値を指定する方法を提供します。ただし、C スタイルの文字列をテンプレート引数として直接使用することはできません。
これは、C スタイルの文字列が null 終端文字を含む文字の配列であるためです。テンプレート引数として使用する場合、文字列の長さを指定するための特別な構文が必要になります。さらに、コンパイラは C スタイルの文字列に対して型チェックを実行できないため、エラーが発生しやすくなります。
解決策の 1 つは、C スタイルの文字列を受け入れ、文字列と対話するためのインターフェイスを提供するラッパー クラスを使用することです。 。例:
<code class="C++">template <class StringType> struct StringWrapper { StringType str; StringWrapper(StringType s) : str(s) {} // Methods for accessing and manipulating the string ... };</code>
このラッパー クラスは、テンプレート引数として使用できます。
<code class="C++">template <class T> struct X { StringWrapper<T> str; // Methods for accessing and manipulating the string ... };</code>
あるいは、const char * 型をテンプレート引数として使用し、引数としての C スタイルの文字列:
<code class="C++">template <const char *str> struct X { const char *GetString() const { return str; } }; int main() { X<"String"> x; cout << x.GetString(); }
C 11 以降では、文字パックをテンプレート引数として使用でき、これを使用して文字列リテラルを引数として渡すことができます:
<code class="C++">template <char... c> struct X { // Methods for accessing and manipulating the string ... }; int main() { X<'S', 't', 'r', 'i', 'n', 'g'> x; // ... }</code>
以上が質問と回答の形式に合わせた、記事のタイトル オプションをいくつか示します。 直接的かつ簡潔: * C スタイルの文字列を C のテンプレート引数として使用する方法 * C スタイルの文字列を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。