ホームページ >バックエンド開発 >C++ >C スタイルの文字列は C のテンプレート引数として使用できますか?

C スタイルの文字列は C のテンプレート引数として使用できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 03:07:29751ブラウズ

  Can C-Style Strings Be Template Arguments in C  ?

テンプレート引数としての C スタイルの文字列

C プログラミングの領域では、C スタイルの文字列を使用しようとするというジレンマに遭遇したことがあるかもしれません。スタイル文字列をテンプレート引数として使用します。この記事では、この問題と考えられる回避策について詳しく説明します。

次のコード スニペットは、この試みを示しています。

<code class="cpp">template <char *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<"String"> x;
    cout << x.GetString();
}

ただし、クラス定義にコンパイル エラーがないにもかかわらず、インスタンス化では次のエラーが発生します。エラーメッセージが表示されます。問題は、コンパイラでサポートされていない文字列リテラルをテンプレート引数として使用しようとしていることにあります。

簡単な解決策には、文字列リテラルを文字ポインタで置き換えることが含まれます。

<code class="cpp">char global_string[] = "String";

template <char const *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<global_string> x;
    cout << x.GetString();
}</code>

このコードは正常にコンパイルおよび実行され、GetString メソッドを使用して保存された文字列を取得できるようになります。

C 11 の出現により、文字を使用して文字列リテラルをテンプレート引数として使用できるようになりました。パック。ただし、以前の C バージョンをサポートするコンパイラの場合、ここで紹介する回避策は引き続き実行可能なオプションです。

以上がC スタイルの文字列は C のテンプレート引数として使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。