[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
281(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)00:41 ID:3HBFHOpK0(1/5) AAS
>>280
いや、 >>279 のほうがちょっと柔軟で使いやすい。
たとえば
void f3(long int, long int) {}
みたいなのを渡したとき >>266 ではエラーになる。
引数として int を渡せる (int から暗黙に変換可能な仮引数を持っている) というのと
厳密に int そのものでなければならないというのとでは制約の厳しさが違う。
287: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:22 ID:3HBFHOpK0(2/5) AAS
>>285
名前探索 (name lookup) は狭い名前空間から探索していって
合致する名前があればそれより外側に同名の関数があっても
オーバーロード解決に参加しない。
わかりやすい例で言えばメンバ関数は非メンバより優先されるし、
メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。
void foo(void) {}
struct bar {
void baz(void) {
// この foo は bar::foo のこと
省6
288: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:34 ID:3HBFHOpK0(3/5) AAS
例をちょっと間違えたのでやりなおし。
void foo(int) {}
struct bar {
void baz(void) {
foo(1);
}
void foo(void) {}
};
こうすると非メンバ関数の foo は候補にすらならないという話。
291: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)12:13 ID:3HBFHOpK0(4/5) AAS
>>285 の例は using を使う形でも解決できる。 (設計意図によってはそれが妥当かどうかわからんけど。)
namespace ns {
struct foo {};
struct hoge {};
int operator+(const hoge& x, const hoge& y) { return 1; }
};
ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); }
namespace ns {
template <class T>
void bar(const T&) {
省6
294: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)16:00 ID:3HBFHOpK0(5/5) AAS
カスタマイズされた関数が呼ばれるようにする綺麗な方法として customization point object という概念が近頃は導入されてる。
綺麗な方法というか汚い部分はライブラリに隠すってだけなんだけど。
真似してみてもいいかもね。
より綺麗な方法が導入されるのはいいんだけど、
過去の方法が消えてなくなるわけでもないし完全に置き換えられるわけでもないからなぁ。
個々には良くなっても全体としては余計に複雑になるだけってのもよくある話。
外部リンク:m.xkcd.com
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s