C++相談室 part166 (422レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
27(1): 15 (ワッチョイ afaa-hOut) [sage] 2025/05/06(火) 18:35:49.00 ID:jhNAw2EC0(1/2) AAS
>>1818(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/05(月) 17:57:32.37 ID:7tS1Ts+e0(1) AAS
>>17
まさに「諸々に配慮」と述べた部分がそれでね……。
ここで定義した operator<< と元からある operator<< の両方が char を受け取ることが可能なので
どちらを呼び出すべきか曖昧なオーバーロード (ambiguous overload) になってしまっている。
ちゃんとやる場合はここで定義する operator<< が受け取れるのはコンテナに限定しなければならない。
型に制約を付ける真っ当な方法が入ったのは C++20 からなのでそれ以前の C++ でやろうとすると回りくどいんだよ。
C++11 でなるべく簡素に書くとしたらこんな感じかな。
外部リンク:wandbox.org
重ね重ねありがとうございます。
なんとか理解してみます。
C++20だとどうなります?
一応、C++の新機能ってぺージ見たんですけど、よくんからなくて
31: 15 (ワッチョイ afaa-hOut) [sage] 2025/05/06(火) 21:47:53.45 ID:jhNAw2EC0(2/2) AAS
>>3030(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 20:07:39.20 ID:SvTeM3j90(6/6) AAS
>>27
こんな感じかな。
外部リンク:wandbox.org
C++20 からはイテレータの概念も再編されて range という概念で扱うのが好ましいということになり、コンテナは range の一種だったことになった。
コンテナの中のここからここまでという範囲を表すものを中心にした考え方で、コンテナ自身も range だし、コンテナの除き窓のような view も range 。
Rust とか Go で言うスライスみたいなもん。
で、テンプレート引数として受け取った T が std::ranges::range の制約を満たすものなんやでという制約を入れることによってそうじゃないものはマッチしないように出来るし、
他の operator<< の候補にマッチするものがあるのならそっちが選ばれるようになる。
ありがとうございます。
rangeはときどき見てたんですけど、ぱっと見あんまり必要性がわからなかったんですけど、こういう理由があったんですね。
これから時間があるときは、rangeを意識して書きたいと思います。
ありがとうございました
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.173s*