- 1 名前:デフォルトの名無しさん [2018/08/27(月) 16:02:00.94 ID:vY3QDx2y0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 https://mevius.5ch.net/test/read.cgi/tech/1531558382/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 565 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 16:42:40.86 ID:l12yg0eyx.net]
- OpenCLでベクトル演算すれば速いんじゃね?
- 566 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 16:58:21.90 ID:Zf2s67R20.net]
- こんなのだと速そうな気がする
vec3 = vec1 - vec2; filter(vec3, 10, index); void filter(const vector vec3, const int limit, int index[]){ int j=0; for(int i=0; i<vec3.size(); i++){ if(vec3[i] >= limit){ index[j++] = i; }else if(vec3[i] <= -limit){ index[j++] = i; } } index[j] = -1; return; }
- 567 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 17:05:52.46 ID:ZX8OqlLQd.net]
- データが多いならざっくり N (2〜8)分割して OpenMP とかで並列処理するのがいいよ
数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない 各分割の結果は独立して保持して後で統合する
- 568 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 17:06:36.21 ID:GYwTywmv0.net]
- >>549
vectorじゃなくvalarrayだが。。。 int main() { int const n = 10; //おまえさんのリクは 1000 だったな //このへん前置きは置いといて mt19937 eng; random_device dev; eng.seed(dev()); uniform_int_distribution<int> dis(-20, 20); auto rnd = [&eng, &dis]() { return dis(eng); }; auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; }; valarray<int> vec1(n); generate(begin(vec1), end(vec1), rnd); print(vec1); valarray<int> vec2(n); generate(begin(vec2), end(vec2), rnd); print(vec2); cout << endl; //ここが本題 valarray<bool> mask = abs(vec1 - vec2) >= 10; vec1[!mask] = 0; vec2[!mask] = 0; print(vec1); print(vec2); } 差が10以上のところを探して何か処理ならこっちのが楽だべ
- 569 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 18:11:51.89 ID:H2d9f0sTa.net]
- >>533の質問のレベルを見ていると、
>>549も「実装完了しないうちから最適化必要と思ってたけど実はそんなこと必要なかった」なんて落ちにはならないかなとふと思った。
- 570 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 18:32:34.48 ID:RR2nvfojr.net]
- boost の multi_array ってさ、添字の入れ替えってできる?
例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作 自分で実装しなきゃ駄目?
- 571 名前:デフォルトの名無しさん [2018/09/18(火) 23:03:47.37 ID:oE0uJFU60.net]
- boostみたいなインチキくさいライブラリは使ったことないが
オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと まずそこを疑う
- 572 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:14:12.21 ID:yg1A1NBg0.net]
- 行列でそんな演算あったような
- 573 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:30:40.91 ID:GKhblNvIr.net]
- >>560
無駄の意味が分からない テンソルの掛け算するときに行列積ライブラリ使うために足組み替えたりするだろ
- 574 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:35:47.30 ID:Re9liTgW0.net]
- できた!
template<typename T> class MyMatrix3D : Matrix3D { ... virtual T get(size_t i, size_t j, size_t k) { return get(k, i, j); } ... };
- 575 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 23:43:07.71 ID:G/V6WyhFd.net]
- stack overflow
- 576 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 00:26:11.52 ID:McwJY1yY0.net]
- わ、わざとだから!
- 577 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 00:33:47.86 ID:dEko0zDA0.net]
- boostとか漏れも使ったことないわ(゚∀゚)人(゚∀゚)ナカーマ
- 578 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 04:24:37.15 ID:2wyJ7zTj0.net]
- boostはbjamが糞すぎて入れるのめんどくさくなっちゃった
- 579 名前:533,549 mailto:sage [2018/09/20(木) 03:07:15.61 ID:fZtZJGAwM.net]
- 遅くなってすみません
処理が重くなったのは別の部分のせいでした… Python的考えで5桁くらいインデントしてたので勝手に遅いと思ってましたが普通に高速でした お騒がせしました
- 580 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 13:40:29.54 ID:CPfoYuVJ0.net]
- たかだか1000回のループでそんなに速度気になるんか(というか並列化とかベクトル化とか大げさやろ)、
と思ってたけどやっぱりか >>558の一人勝ちやな
- 581 名前:デフォルトの名無しさん [2018/09/20(木) 21:36:12.15 ID:zLqp8E230.net]
- 低学歴知恵遅れなら
1回ループするのに1分かかるようなコードを書きかねない
- 582 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 00:16:00.80 ID:4kzBlK6i0.net]
- 再帰使ってみたが1分かからんかった
ゆ、許された… ttps://ideone.com/kHFd61
- 583 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 00:27:26.94 ID:4kzBlK6i0.net]
- 1分の壁を破るには、何度も何度もそれとわからずに同じ計算をするようなアルゴリズムにしないとだめだなあ…
- 584 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 03:21:51.90 ID:xr3UMDDx0.net]
- boostをVS2017に入れられない
- 585 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 13:11:38.33 ID:JwHgudh+H.net]
- 関数A,B、C、D、EがあってAの中でBを呼んで、Bの中でCを……
って構造があって、例えばEでエラーが出るとします。大本のAにそれを伝えてエラーにしたいんですけどどうしたらいいでしょう BCDEの戻り値全部boolにしてfalseを返すくらいしか思いつかないです
- 586 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 13:20:30.45 ID:EQpNFWj/0.net]
- >>574
戻り値でもいいし、引数に参照やポインタを渡してもいいし 例外でもいい
- 587 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 13:40:44.63 ID:FzfC+eZt0.net]
- 書く分には例外を投げるのが楽じゃないの。
関数 B, C, D ではそのエラーについて忘れておくことが出来るので。
- 588 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 13:41:36.51 ID:IFsUWHdO0.net]
- >>574
例外を投げてキャッチさせる
- 589 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 14:25:47.49 ID:wDeX8uPc0.net]
- 例外はGOTOに迫りつつある
- 590 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 14:34:59.25 ID:lJw3kOTN0.net]
- >>574
典型的な例外の出番だ void E() { throw std::runtime_error("error at E()"); } void D() { E(); } void C() { D(); } void B() { C(); } void A() { try { B(); } catch(std::exception& err) { std::cerr << err.what(); } }
- 591 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 14:47:07.50 ID:JwHgudh+H.net]
- 皆様ありがとうございました。
別関数からのまでcatchできるとは知りませんでした。>>574を参考にしつつ書いてみようかと思います。 ファイル読み込みのときはあんま例外使わないなんて記述見たんですけど別に書いても大丈夫ですよね
- 592 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 16:31:17.28 ID:vcIlO6Gbr.net]
- スッゲェ素人なんだけどよ、他人が作ったクラスに自作関数を付け加えたいときってどうすんの?
(例えば、行列クラスに特異値分解する関数を付け加える等) 継承ってやつを勉強して使うだけ? C++ の言語仕様と常識を勉強したいという意味でもあるので、「その他人のコードを直接編集せよ」ってのはナシで頼む
- 593 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 16:50:36.52 ID:K+jLUYtn0.net]
- >>581
機能を追加するために継承使うのは設計的によくないよ
- 594 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 17:01:37.16 ID:pko5dpD3r.net]
- >>582
どうするべき?
- 595 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 17:06:42.97 ID:OnuHA6YMx.net]
- >>581
クラスの親子関係がはっきりしてるなら継承。 機能が似てるだけなら移譲。 どちらか迷ったら移譲。
- 596 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 17:15:33.49 ID:K+jLUYtn0.net]
- >>583
void svd(Matrix &pMtx); みたいな関数ではダメなの?
- 597 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 17:45:50.45 ID:nytN4gJ8r.net]
- >>584
移譲という用語は初めて知ったので、勉強してみます >>585 ダメ、ということはないと思いますしこれまではそうしてきました しかし、行列の特異値分解は配列ではなく行列に適用するべきだという意識が強くなりました BLAS 等の多くてややこしい引数も、「行列を渡す」という形で書くことでもう少し自分にとって読みやすくなるのではないかとも思いました クラスだとか他人のコードの拡張といったことを勉強してみたくなったということでもあります
- 598 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 18:21:14.81 ID:FzfC+eZt0.net]
- >>586
なんでもかんでもメンバ関数として持たせるのはダサいというのが近年の風潮。 設計方針にもよるんだけど、機能をちょっと増やすたびに新しい型を作るのも馬鹿馬鹿しいだろう。 単なる関数として作ればそれでよいはずのことにクラスの依存関係まで出てくるの、ホントに良くない。
- 599 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 18:35:46.91 ID:nikK7GUa0.net]
- >>584
>どちらか迷ったら移譲 やめろ、割とマジで 本来継承が好ましいものに委譲を使うと後々になって必ず破綻する お前D&E読んでないのか? >>587 >ダサいというのが近年の風潮 そういう言い方・考え方もやめろ かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった その間初心者は嘘の情報に騙されたりオブジェクト指向を誤解したりして、結果C++から離れていった >単なる関数として作ればそれでよいはず これは正しい
- 600 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 18:37:09.46 ID:MaoTi4980.net]
- >>587
完全に同意。 クラスの数が星の数ほどあるプロジェクトで、継承してメソッド一個追加してるだけとかの経年劣化したソース見たら目眩がするわ。 オブジェクト指向の初期啓蒙として「既存のクラスは変更するな」「機能追加は継承使え」って言ってた人を恨むわ。
- 601 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 18:40:06.68 ID:MaoTi4980.net]
- >>588
もちろん「IS-A」が成り立ってる継承が適してるものは継承使うべき。 むしろ継承を使うべきでないとこに継承使ってるほうが後々破綻するので悩んだら委譲。
- 602 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 18:53:16.27 ID:nVnA1Sbpr.net]
- >>588-590
では特異値分解、スライシング、掛け算、足し算、エトセトラ……、という大規模な機能追加を既存のクラスに対して行ないたい場合はどのようにするべきでしょうか
- 603 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:06:55.02 ID:MaoTi4980.net]
- >>591
うーん、場合によるけど全てそのクラスに対する操作ならさすがに継承するかな。 後々のメンテ考えたら可能であれば継承元のクラス変更するけど。
- 604 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:18:19.30 ID:scCYqhjF0.net]
- 他人が作ったクラスで勝手にいじれないんでしょ?
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ どうせ親クラスのprivateはいじれないんだし
- 605 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:20:28.05 ID:wzHnJ4yt0.net]
- unified call syntax 甦れ。
- 606 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:24
]
- [ここ壊れてます]
- 607 名前::14.64 ID:nikK7GUa0.net mailto: >>591
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・ 継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う (責任は負わんw あくまで勉強目的でやってみるのはいいと思う) ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は >>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい 特に >掛け算、足し算 こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む (メンバに書いてもグローバルに書いても利用者側はA * Bって書ける あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね [] - [ここ壊れてます]
- 608 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:48:50.66 ID:MaoTi4980.net]
- >>595
完全に同意。
- 609 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 19:58:47.83 ID:nVnA1Sbpr.net]
- >>592-596
なるほど。 普通に関数にするのが、必要十分さの面で、良さそうですね。 頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。 グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。 メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。 コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
- 610 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:09:39.68 ID:scCYqhjF0.net]
- 引数の型が○○やconst ○○&になるでしょ
それ以上のなにが欲しいの?
- 611 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:10:46.02 ID:nikK7GUa0.net]
- そういえばBLASとは書いてたけどuBLASとは書いてなかったな
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ 違う型を渡したらエラーになる
- 612 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:12:28.34 ID:+2gqfJ3dM.net]
- >>597
どうでもいいけど最初と大分キャラ変わってるぞw
- 613 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:17:41.28 ID:nVnA1Sbpr.net]
- >>598-599
わかりました。 確かに型を見たら自明ですね。 結局は > svd(m)をm.svd()って書きたいためだけ だったのかも知れません。 なんせそういう書き方はいかにも「ぽい」ですから。 ありがとうございます。
- 614 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 20:19:42.40 ID:KRvbJL35d.net]
- >>601
横レスになるかもだけど多相的に
- 615 名前:関数の集合を規定したいなら[C++ traits]で検索すると幸せになれるよ
今回は不要だと思うけど後々欲しいなって思ったとき役に立つ [] - [ここ壊れてます]
- 616 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 20:43:37.20 ID:FzfC+eZt0.net]
- >>588
いや、風潮っていうのは確かにあるよ。 かつて上手くいかなかったから今もダメとは限らない。 テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、 それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。 今はクソみたいな SFINAE と type_traits で不格好になんとかしてるのも C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。 Rust や Go の隆盛でプロトコル指向への理解が深まっているというのもある。
- 617 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 21:06:19.19 ID:nikK7GUa0.net]
- ・・・・・俺が何を批判したかわかってないな
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、 質問者のケースに合った説明をしろっつってんの なんで当時の「テンプレートで継承の代用」の例を出したかわからんか? 代用にはなり得ないんだよ原理的に 実行時のポリモーフィズムをテンプレートで実現できるのか? ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ それを1つの型でまとめられるのか?? type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな 自分の頭でその方法が合っているか合っていないか考えずに 流行とかに流された結果が、↑で挙げたソレなんだよ C++潰したいのかよ
- 618 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 21:35:12.47 ID:MaoTi4980.net]
- >>604
これも横からだが、C++はもう役割を終えて衰退機だと思う。 今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。 いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。 盛者必衰。
- 619 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 21:55:31.46 ID:FzfC+eZt0.net]
- >>604
> 何故それが好ましいか、好ましくないか、 > 質問者のケースに合った説明をしろっつってんの それは >>587 の説明で足りないか? 風潮があって、その理由は不要な複雑さが出来るからだという説明で足りないか? この説明は質問者のケースに合致してないか? > 代用にはなり得ないんだよ原理的に 違う機能が違う能力を持つのは当たり前だろ? 説明するまでもなく。 どちらの機能を中心に活用した「設計」がよいのかっていう話じゃないか。
- 620 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 22:01:19.22 ID:nikK7GUa0.net]
- >>606
ああすまん、確かに言葉尻に反応したところはあったな でも「風潮」とか「ダサい」って蛇足だよな?w ダサいって言いたかっただけやろ? >違う機能が違う能力を持つのは当たり前だろ? お前>>603で >かつて上手くいかなかったから今もダメとは限らない。 >テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、 テンプレートを盲信してるようだから説明したんだが。 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ? >C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。 とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか 抜かしたかったのがわかる マルチパラダイムの意味わかってる?
- 621 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 22:15:11.22 ID:M9VunTBo0.net]
- 継承をテンプレートで置き換えるって失敗したというよりもすでに当たり前になっただけでは
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
- 622 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 22:20:50.92 ID:nikK7GUa0.net]
- >>608
静的に解決できるものならそうだろうな そういうケースを否定はしてないが、当時はあちこちでそういう失敗例がドヤ顔で披露されてたんだぞ 禿も指摘してるようにJavaのせいだが
- 623 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 22:46:33.24 ID:FzfC+eZt0.net]
- >>607
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ? 違うものは違う。 代用品ではない。 継承構造の代用品としてテンプレートを使えというのではなく、 テンプレートも前提のひとつとしたデザインにしろと言ってんの。 「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
- 624 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:01:04.77 ID:nikK7GUa0.net]
- >>610
>>603で >かつて上手くいかなかったから今もダメとは限らない。 >テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、 >それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。 って言ってるよな 「かつて上手くいかなかった」って、 俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」 のことだろ?言い逃れしてんじゃねーよ ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ >「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。 質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
- 625 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:02:28.75 ID:ZQgI79kj0.net]
- 質問者を放置してドヤ顔で語るオタクたち
- 626 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:10:39.91 ID:nikK7GUa0.net]
- あ、ついでに言うと
>言語そのものとしてのサポートが不充分だった ねーよ C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが STLしかりModern C++ Designの著者のLokiしかり Boostだって当時からあったからな
- 627 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:26:46.84 ID:wfTNvghC0.net]
- >>605
C++に挫折でもしたの? w ネイティブコード吐けるオブジェクト指向言語ってそんなに選択肢ないし
- 628 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 23:30:11.36 ID:wzHnJ4yt0.net]
- FixedC++であるRustに期待はしているが・・・。
- 629 名前:はちみつ餃子 mailto:sage [2018/09/21(金) 23:41:33.16 ID:FzfC+eZt0.net]
- >>611
なんでその結論に納得できるのに前提に色々言ってんだ? テンプレートについてはそっちが言い始めたことで、別の話題だろ? 代用という言葉の使い方がちょっとずれてるだけじゃないの。 そのまま置き換えれるかという意味では代用できないし、 継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある) という意味では代用ともいえる。 言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。 デザインの風潮というものは間違いなくある。
- 630 名前:はちみつ餃子 mailto:sage [2018/09/22(土) 00:00:10.67 ID:cynlNZMd0.net]
- >>613
無理無理。 今だってろくでもない回りくどい仕組みでどうにかこうにか 型の制約を表現できてるってだけだもの。 初心者にそれを元にデザインさせるのは無理。 型の制約についての知見とは別に C++ の言語機能が足りてない。
- 631 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 00:04:20.29 ID:0je8S2eS0.net]
- >テンプレートについてはそっちが言い始めたことで
ダサいとかイケてるとか風潮とかで設計を語るからだよ お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか? そういう傾向を指摘されたって気づいてるだろ? 自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ? さっさと謝ってりゃここまで言ってないんだがな >デザインの風潮というものは間違いなくある。 そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては) >>617 何の話してんの?コンセプト?w なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの? コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
- 632 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 00:11:49.56 ID:vYximTvP0.net]
- 最初はもてはやされたけど、みんな知ってる前提になったら特に触れられもしなくなった
風潮ってこいうのだろw
- 633 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 00:12:42.81 ID:0je8S2eS0.net]
- すまんちょっと熱くなりすぎた
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・ もうやめとく
- 634 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 01:40:05.82 ID:3xdfFsZb0.net]
- 権限の委譲というと良いものを与えているイメージだが
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ な気がする
- 635 名前:572 mailto:sage [2018/09/22(土) 02:14:06.30 ID:3xdfFsZb0.net]
- 昨日のプログラムを改良したったwwwww
ttps://ideone.com/hkeEp0 データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。 N=1000だと宇宙の終わりまでかかる予定。 これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
- 636 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 03:45:26.27 ID:57qyxfm80.net]
- https://ideone.com/CYkJfe
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。 終わった話題かもしれんけど。 どうしても高速化したいんやったら、関数を並列実行できるようにして、 https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html 上記の数で分割実行かなぁとか。 フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
- 637 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 03:54:48.35 ID:57qyxfm80.net]
- 気が付いたら、absがテンプレート関数じゃなくなってた。
- 638 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 07:17:07.67 ID:ieaomBGwa.net]
- constexprな関数はコンパイル時でも実行時でも使えるが、定数になる文脈とならない文脈で関数を使い分けしたい。そういう使い分けは可能だろうか?
例えばsqrt関数はconstexprになっていないが、 アルゴリズム的には自作関数でconstexpr対応可能 ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
- 639 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 07:58:27.87 ID:0je8S2eS0.net]
- is_constexprで検索したらそれっぽいアイデアは出てくるけど
- 640 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 09:39:59.40 ID:qCwQCuMG0.net]
- >>625
ビルド過程を見直せば? バカみたいに何でもかんでもconstexprに頼る理由はない。
- 641 名前:はちみつ餃子 mailto:sage [2018/09/22(土) 12:24:16.36 ID:cynlNZMd0.net]
- >>618
なんで実行時ポリモーフィズムの話なんか出てるんだ? 出来ないもんをやれなんて言ってないだろ。 関係ない要素をどんどん出してくるなよ。 何を言いたいんだ?
- 642 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 13:05:08.82 ID:PHVB0Lj2M.net]
- templateで躓いてるんですけど皆どうやってテンプレートを勉強したんですか?
- 643 名前:デフォルトの名無しさん [2018/09/22(土) 13:06:49.63 ID:sAfENX6G0.net]
- 車輪の再発明
- 644 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 13:16:51.91 ID:EBMrcrP1a.net]
- 何を悩んでる?
- 645 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 13:22:32.93 ID:PHVB0Lj2M.net]
- >>631
Boostのテンプレートを読んでるのですが、理解できない点です
- 646 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 13:36:27.52 ID:a9vdXzW90.net]
- >>632
まずはstlは一通り不自由なく使えるかな?
- 647 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 13:45:08.87 ID:PHVB0Lj2M.net]
- >>633
はい、STLに関してはそれなりに使えます
- 648 名前:はちみつ餃子 mailto:sage [2018/09/22(土) 13:53:36.62 ID:cynlNZMd0.net]
- >>632
Boost はかなり技巧的で無理やりなこともやるので、 ある程度 C++ をわかっている人でもまともに読めないこともある。 普通に入門書とかを読むところから始めるしかないんじゃね?
- 649 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 15:05:35.09 ID:JTph0UBg0.net]
- boost読んでテンプレート勉強しようとするのは、IOCCCでCを勉強しようとするのと同じくらい無謀
- 650 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 23:16:14.20 ID:Img386zI0.net]
- test
- 651 名前:デフォルトの名無しさん mailto:sage [2018/09/22(土) 23:16:57.30 ID:02eserMU0.net]
- アホ
- 652 名前:デフォルトの名無しさん [2018/09/23(日) 00:42:54.42 ID:cRG95Xcq0.net]
- boostのインチキくさそうなソケット通信とか使ってるヤツいんの
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
- 653 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 01:28:26.89 ID:MC3A3QT40.net]
- SG4に標準化提案はされてるみたいね
- 654 名前:はちみつ餃子 mailto:sage [2018/09/23(日) 03:10:01.78 ID:SNhvYMGK0.net]
- >>639
Boost のことはよう知らんけど、 Boost の他のライブラリと組み合わせやすいとか、 そういう利点はないの?
- 655 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 09:37:53.48 ID:LgC14Oo10.net]
- bool operator<(const T& a, const T& b)は定義されている前提で、
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、 定義されていなかったら bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); } を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
- 656 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 11:39:09.69 ID:A6XCmyXs0.net]
- std::rel_ops空間に == から != を、< から <= > >= を合成するテンプレートならあるけど
- 657 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 12:14:54.07 ID:loi8GnJQ0.net]
- これとかに載ってなかったっけ?
https://www.amazon.co.jp/dp/4894714353/?tag=hatena_st1-22&ascsubtag=d-7dzm
- 658 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 14:13:03.08 ID:oyuLVtOs0.net]
- detection idiomで検出してSFINAEで分岐させるだけでできそうだけど
- 659 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 14:26:07.42 ID:Dpz6ufMn0.net]
- barton nackman trickやな
operator ==が定義されているかどうかの分岐はSFINAEいるんでちょっと複雑になりそうだけど private継承する基底を選ぶような形にできるはず
- 660 名前:デフォルトの名無しさん [2018/09/23(日) 16:41:12.46 ID:d60j7qb90.net]
- そんなことができるざんすか。
めんどくさそうですな。
- 661 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 16:42:46.60 ID:oyuLVtOs0.net]
- if constexprつかえばSFINAEいらんな
普段使えない環境だから出てこなかった・・・
- 662 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 17:06:46.21 ID:LgC14Oo10.net]
- スフィ姉たまんねぇ
ていうか>>643見てnamespace rel_opsの定義見て考えたがSFINAE要らなくね? コンパイラの挙動(関数名の解決規則?)として、 Tについてoperator==(const T& a, const T& b)そのものズバリが定義されていればそれが使われるし、 無ければその次以降にテンプレートを探しに行こうとするから、 そのときstd::rel_ops名前空間が導入されていれば勝手にテンプレートバージョンが使われる というしくみっぽい?
- 663 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 17:18:52.49 ID:oc2N8BDIM.net]
- >>632
バリバリのテンプレート使いいませんか? テンプレート難し
- 664 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 17:45:10.35 ID:oyuLVtOs0.net]
- >>649
あーたしかに 試してみたらいけた
- 665 名前:デフォルトの名無しさん mailto:sage [2018/09/23(日) 17:58:10.59 ID:Dpz6ufMn0.net]
- >>648
if constexprほとんど使ったことなかったけど便利だなー 確かに型で分岐する必要なかった https://wandbox.org/permlink/8CGWlZ5i5JLl33Ws >>649 その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん? それでもいいならいいけど
|

|