ホームページ  >  記事  >  バックエンド開発  >  文字列リテラルは C の非型テンプレート パラメーターとして使用できますか?

文字列リテラルは C の非型テンプレート パラメーターとして使用できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-17 06:03:03211ブラウズ

Can String Literals Be Used as Non-Type Template Parameters in C  ?

非型文字列リテラルを含むクラス テンプレート

C では、非型パラメーターを含むクラス テンプレートを宣言する必要が生じる場合があります。文字列リテラルなど。このクエリは、このアプローチの実現可能性を調査し、解決策を提供します。

非型テンプレート パラメータの根拠

文字列リテラルを非型テンプレートとして直接利用することもできます。利便性や読みやすさを目的としたパラメータです。ただし、これは C では直接サポートされていません。

実現可能な回避策

文字列リテラルを直接渡すことは不可能ですが、回避策として const char* non を使用する必要があります。 -type テンプレート パラメーターを使用し、静的リンケージを使用して 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();
}

説明

  • クラス テンプレート cts は、const char* 非型テンプレート パラメーター str で定義されています。
  • teststr という名前の静的にリンクされた const char[] 変数が宣言されており、文字列リテラル「Hello world!」で初期化されます。
  • main 関数では、テンプレート引数として teststr を使用して cts のインスタンスが作成されます。
  • cts の p() メンバー関数object は str に格納されている文字列を出力します。

結論

この回避策を使用すると、クラス テンプレート内の文字列リテラルを非型パラメーターとして効果的に使用できます。これは、文字列リテラルの直接入力が不可能な場合の代替ソリューションを提供します。

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

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