ホームページ >バックエンド開発 >C++ >C で文字列リテラルを型以外のテンプレート引数として使用するにはどうすればよいですか?

C で文字列リテラルを型以外のテンプレート引数として使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 15:14:14869ブラウズ

How can I use string literals as non-type template arguments in C  ?

非型テンプレート引数として文字列リテラルを渡す

C テンプレートの領域では、文字列リテラルを次のように受け入れるクラス テンプレートを宣言します。型以外のテンプレート パラメーターは複雑な作業になる可能性があります。多くのプログラマーは、my_class<"string"> など、テンプレート宣言で文字列リテラルを直接指定できることを望んでいます。

このニーズに対処するために、C では文字列リテラルを非型として直接渡すことは許可されていません。引数を指定するには、const 文字配列を利用する解決策を使用できます。静的にリンクされた const char[] 変数を定義し、それをテンプレート パラメーターとして渡すことで、文字列リテラルを使用する場合と同様の効果が得られます。

このアプローチを示すコンパイル可能なコード スニペットを次に示します。

#include <iostream>

template<const char *str>
struct cts {
    void p() {std::cout << str;}
};

static const char teststr[] = "Hello world!";
int main() {
    cts<teststr> o;
    o.p();
}

この例では、teststr という名前の静的にリンクされた const char[] 変数が値「Hello world!」で定義されています。 teststr を型以外のテンプレート パラメーターとして cts クラス テンプレートに渡すことで、文字列リテラルを使用する目的の動作を効率的に実現できます。

このコードを実行すると、次の出力が生成されます。

Hello world!

この手法は、C で文字列リテラルを型以外のテンプレート引数として渡すための直接サポートがないことに対する回避策を提供し、プログラマーが文字列のような値を受け入れるクラス テンプレートを定義できるようにします。便利な方法で。

以上がC で文字列リテラルを型以外のテンプレート引数として使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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