[過去ログ] 0からの、超初心者C++相談室 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
960(2): デフォルトの名無しさん [sage] 2024/11/23(土) 23:49:52.60 ID:thI1occS(1) AAS
std::anyを使っていて、type()の返す形によって処理を変えたいのですが、
今はこれを typeid(形) と比較するif-else文の繰り返しを書いています
ググったら、hash_code()を使えばswitch文で書けるというのがあったのですが... 書けます?
エラーでコンパイルできないんですが
error: call to non-'constexpr' function 'std::size_t std::type_info::hash_code() const'
961: はちみつ餃子 ◆8X2XSCHEME [sage] 2024/11/24(日) 12:09:51.87 ID:3DfWckE7(1/2) AAS
>>960
「使えば」というのはどう使うという状況を言ってる?
具体的なコードを出して。
962: はちみつ餃子 ◆8X2XSCHEME [sage] 2024/11/24(日) 12:55:51.06 ID:3DfWckE7(2/2) AAS
>>960
switch の case ラベルに hash_code を使うという意味なら不可能。
case ラベルは定数 (定数式) であることを要求していて std::type_info::hash_code は constexpr が付いていないので結果は定数にならない。
コンパイル時計算するなんらかのハッシュ関数を用意すれば一応はなんとかならんでもないが……。
余興の類であって普通のテクニックとは言い難い。
そもそも std::any が不格好な仕組みなので std::any を使う以上は不格好になることを受け入れないと仕方がないと思う。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.046s