[解決済み] 非型式テンプレートパラメータ
2023-01-25 15:31:08
質問
非型のテンプレートパラメータは定数積分式であるべきだと理解しています。なぜそうなるのか、どなたか教えてください。
template <std::string temp>
void foo()
{
// ...
}
<ブロッククオート
error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.
定数積分式がどういうものかは理解できました。のような定数でない型が許されない理由は何ですか?
std::string
のような定数でない型を許さない理由は何ですか?
どのように解決するのですか?
これができない理由は、定数でない式はコンパイル時に解析して代入することができないからです。それらは実行時に変更される可能性があり、それには実行時に新しいテンプレートを生成する必要がありますが、テンプレートはコンパイル時の概念であるため、それは不可能なのです。
以下は、標準が非タイプのテンプレートパラメータに対して許可しているものです(14.1 [temp.param] p4)。
非タイプのテンプレートパラメータは、以下の(オプションでcv-qualified)タイプのうちの1つを持たなければならない。
- 整数型または列挙型.
- オブジェクトへのポインタ、または関数へのポインタ。
- オブジェクトへのlvalueの参照、または関数へのlvalueの参照。
- メンバーへのポインタ。
std::nullptr_t
.
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] C++テンプレート関数定義の.CPPファイルへの格納
-
[解決済み】静的定数文字列(クラスメンバ)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++