- C++相談室 part129 [無断転載禁止]©2ch.net
664 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 11:43:31.57 ID:YXP7lJmh0 - ていうか仮想関数(による多態性)とテンプレート(によるfunctor)がどっちも使える状況で
どうしてもメンバ関数のアドレスをとる必要があるというシチューエーションとは一体、 ちなメンバ関数のアドレスをとる構文は覚えていない 主記憶にございません
|
- C++相談室 part129 [無断転載禁止]©2ch.net
665 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 11:45:58.26 ID:YXP7lJmh0 - 誤:テンプレート(によるfunctor)
正:テンプレート(へのfunctorとかクロージャ渡し)
|
- C++相談室 part129 [無断転載禁止]©2ch.net
667 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 12:41:56.92 ID:YXP7lJmh0 - f.calc(x, 2)をfunc(x)として呼びたいためだけにstd::bind()を使うのはメリット感に欠ける…
|
- C++相談室 part129 [無断転載禁止]©2ch.net
699 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 15:49:31.59 ID:YXP7lJmh0 - JavaScript…
あれはインスタンスしかないみたいな似非^2オブジェクト指向じゃん? あまりの酷さに批判が高まったのか、エッセンス6とかでprototypeキーワードが導入されたが それぐらいのもん ちなC++の話として、クロージャはあんま継承関係無い f.calc(x, 2)をfunc(x)の如く扱いたければfの所有でおk
|
- C++相談室 part129 [無断転載禁止]©2ch.net
700 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 15:55:28.34 ID:YXP7lJmh0 - 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、
間接メモリアドレッシング後のcall止まりになるんではないかと危惧してゐる テンプレートを使える環境にありながら 関数へのポインタなど使うのは教育上によろしくない
|
- C++相談室 part129 [無断転載禁止]©2ch.net
704 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 16:35:15.55 ID:YXP7lJmh0 - >> 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、
>というかこれを期待するのがC++なのか? >それはさすがに厳しいとは思うが、確かに無理ではないが。 できる F:calc()は仮想関数では無いし、 表記の例では&F:calc自体が(F::calc()と同じシグネチャを持つ別名の関数とかに)差し替えられはしないので 本質的には直接callとなるべきもの
|
- C++相談室 part129 [無断転載禁止]©2ch.net
709 :デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]:2017/03/18(土) 17:59:03.48 ID:YXP7lJmh0 - >それを言いだしたら全部だろ。そうなってないから色々問題なわけで。
std::bind(&F::calc, f, _1, 2)という記述を見たコンパイラはポインタが関係するのでF::calc()を直接呼出しして良いものか迷うかもしれないが、 std::bind(<F::calcを表す関数オブジェクト>, f, _1, 2)なら std::bind()自体の書き方や関数オブジェクトの書き方がよほどアレでない限りはF::calc()直接呼出し相当のコードになる 全部一緒というなら一緒なんだろう藻前の中では(ry
|