- 1 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 17:53:02.14 ID:FOAGvAbs.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part135 https://mevius.5ch.net/test/read.cgi/tech/1522495206/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ 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
- 756 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 07:26:44.37 ID:WtSMvp2C.net]
- レイトレーシングがサーフェイスモデルより簡単とか
半透明物体内部の散乱表現に踏み込んだらそんな寝言は言えないんじゃ…
- 757 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 10:07:11.78 ID:uSgRX9ke.net]
- みんな例外と戻り値ってどう使い分けてる?
例えば以下みたいな、ファイルからとある要素を抜き出して返す関数とかで std::string extractHogeFromFile(const std::string& file_path) 俺だったら以下みたいにしてるけど、いまいちしっくり来てないとも思ってる ファイルが見つからない→例外 要素が見つからない→例外 要素が見つかるけど空→空 みんな例外クラスとかはstd::exception継承して自作してるのかな? バックトレースやコード行数とれないのが使いにくくて、javaっぽい例外クラスを自作してる
- 758 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 10:16:27.95 ID:Z0vFISs/.net]
- 例外は発生時の動作が遅い
- 759 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 10:17:50.65 ID:gsTSbRo/.net]
- exceptionを直に継承ということは滅多にないな
system_errorがあるからerror_categoryの派生クラスを作れば大抵足りる __FILE__ や __LINE__ のようなデバッグ情報を入れたくてマクロを作ることはあるけどね 空という概念ならoptionalはいかが? template <typename ELEMENT> std::optional<ELEMENT> extractHogeFromFile(std::path) noexcept(false);
- 760 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 10:36:14.97 ID:uSgRX9ke.net]
- >>733
発生時は確かに遅いね ただ、あくまでも例外的なものだけに利用をとどめておけば、そんなに発生するものでもないし、その場合は戻り値をifで見るより命令数が少なくなるから、結果的に高速になるって俺は考えてる >>734 exception直に継承も少し疑問もってるんだけど、std::exceptionのcatchで全部取りやすいからこうしてるんだよね ...でcatchは乱暴な気がするし ただ、調べて見た感じsystem_errorも使いやすそうね。最近開発で使えるようになったC++11だからこんなのあるの気づいてなかったわ std::optionalとかあったんだね、ちょっと調べてみるわありがとう
- 761 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 11:20:33.79 ID:NtbFT1j9.net]
- >>720
レイトレーシングが簡単なのは入り口だけ 20世紀あたりのなんちゃってレイトレーシングは楽だけど本格的にやると解決できない問題が多数出てくる
- 762 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 11:32:34.68 ID:D1VtDJH7.net]
- ファイル開くのはそれ自体がすっごい遅い操作だから例外のコストなんか無視できるのと
開き損なうとそれ以降の処理が致命的な失敗になりやすい そういう操作のエラー通知が例外に向いてる
- 763 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 11:47:23.91 ID:2dORgvS5.net]
- >>733
例外発生時の速度が問題になるなら例外の使い方を見直した方がいい
- 764 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 12:31:28.26 ID:Z0vFISs/.net]
- >>832に対して
例外は遅いから例外の時に使いましょう ということを書いたつもりなんだけど 単なる終端マークとか区切りとか そういう頻出する可能性のある用途では使っちゃダメってこと
- 765 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 12:35:13.84 ID:Z0vFISs/.net]
- 例外は仕組みを入れるだけで、
例外が発生しなくてもオーバーヘッドが発生する環境がほとんどなので 組み込みだとわざと無効にすることも多い x86の64bitはオーバーヘッドが無い代わりに 例外発生時は極端に遅い 一度測定してみるとその遅さがよく分かる そういうことがわかっていれば どこに使うべきかがおのずとわかる
- 766 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 12:41:46.34 ID:WtSMvp2C.net]
- 低水準ライブラリに属するべき関数が例外みたいな高級なしくみに依存するのは美しくないキモス
システム設計とかアプリの基本設計レベルで例外の種類とcatch箇所とcatch時の処理を定義して使うなら良い が、呼び出し側でif文を書きたくないからという理由でイミフな例外定義を行うと、結局第三者に正しく使ってもらえない キモス
- 767 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 12:48:07.11 ID:WtSMvp2C.net]
- 例外のオーバーヘッドについてはこれな↓↓↓
ttp://zakkas783-blog-blog.tumblr.com/post/3870295160/c-の例外ハンドリングとパフォーマンス >>740の通り例外処理の裏側の実装には2つの潮流があるんじゃ
- 768 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 13:03:58.12 ID:u8inRKlo.net]
- 制御をすっ飛ばす必然性があるほどの例外的状況に限るのが吉だろうな。
返値で返せないものを返すのに使うなら検査例外のような保証が欲しいところ。
- 769 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 13:22:39.94 ID:BGH31mSy.net]
- 別スレッドでの関数呼び出し階層が深すぎて安全にスレッド終了させる方法が分からない時に便利でしょ、例外。
- 770 名前:デフォルトの名無しさん [2018/08/13(月) 13:37:06.53 ID:hqkLiaZ4.net]
- このパーセンテージどうやって表示してるのですか?
aokomoriuta.hateblo.jp/entry/2016/05/05/145810
- 771 名前:デフォルトの名無しさん [2018/08/13(月) 13:37:33.57 ID:hqkLiaZ4.net]
- すいませんこれです
https://i.imgur.com/p53FZao.jpg
- 772 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 14:16:12.02 ID:uSgRX9ke.net]
- 前測ったときはアセンブリ言語にしてみると、戻り値ifチェックだと2命令だったのが例外使うと20命令くらいだったなぁ
- 773 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 14:27:34.65 ID:uSgRX9ke.net]
- >>741
自前の文字列操作のUtilとかだと例外にするかすごいその観点で迷うんだよね >>743 賛否両論なjavaの検査例外だけど欲しくなるときはあるね C++の例外指定がもう少し使いやすければよかったんだが >>744 すごく同感
- 774 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 14:39:38.06 ID:gsTSbRo/.net]
- >>739
困ったことにbasic_iosはexceptionsで頼みもしてないのにEOFで例外を投げる
- 775 名前:デフォルトの名無しさん [2018/08/13(月) 14:48:44.15 ID:p4qIMBze.net]
- HTTPで400番台500番台は例外投げればいいのかな。
- 776 名前:デフォルトの名無しさん [2018/08/13(月) 14:51:05.76 ID:p4qIMBze.net]
- 例外を投げるクラスはピッチャーって名前でいいんか?
受け取るクラスはキャッチャー?
- 777 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 15:18:30.60 ID:m/ibS17x.net]
- 甘めの例外を打ちかえすのはバッター
- 778 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 15:38:43.20 ID:Twrhv79p.net]
- C++17では多値が返せるようになりました。
できるならレガシーを切って次へ行きたいものです。 またはstd::optionalなんてものもありますな。 std::tuple<bool,Item> Fun(){return {true,Item()};} auto [F,I] = Fun();
- 779 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 15:41:48.16 ID:Twrhv79p.net]
- あ
- 780 名前:、多値自体は返せたけど受け取って初期化できるようになったか。
ちなみにすでに実体化している変数は、std::tie(...);で受け取れます。 [] - [ここ壊れてます]
- 781 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 16:14:15.10 ID:gsTSbRo/.net]
- >>754
prvalueでもforward_as_tupleならおk
- 782 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 16:15:13.67 ID:gsTSbRo/.net]
- auto func()
{ return forward_as_tuple(123, "456"); }
- 783 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 19:17:45.97 ID:Twrhv79p.net]
- お、なるほど。良いこと聴いた!
- 784 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 20:21:18.19 ID:m/ibS17x.net]
- ただ元からタプルがある言語と比べたら劇的に汚い仕上がりだよね
- 785 名前:デフォルトの名無しさん mailto:sage [2018/08/13(月) 21:43:01.79 ID:3hlPfGdJ.net]
- itest.5ch.net/test/read.cgi/tech/1528382412
前スレのURL違うくね これがただしいっしょ
- 786 名前:デフォルトの名無しさん [2018/08/14(火) 02:06:11.13 ID:41LFYoyc.net]
- >>758
何と比べてる?
- 787 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 02:50:24.34 ID:oCVPQ4uM.net]
- そんなに汚いかねえタプル
- 788 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 03:32:08.59 ID:+lmSJTba.net]
- 演算子オーバーロードっぽいものを珍重するのはやめた方がいいと思うけどね。
- 789 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 08:20:26.94 ID:8F/Sy9ZI.net]
- autoでしか受けられないのがイマイチかなあ
メインの戻り値は期待する型を明示したいことがある エラーの方が何のenumかは知ったこっちゃないからautoにしたかったりするからややこしい
- 790 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 09:31:57.53 ID:oMbBbcEB.net]
- 無名の共用体と似たようなもので
構造体のメンバをバラで貰えるってだけやん
- 791 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 09:44:39.80 ID:fJuFDfsp.net]
- 型推論のautoを見て嘔吐
- 792 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 12:12:14.83 ID:9UC8tUq9.net]
- C++のメタプログラミングって実際にはどうすればあんな複雑に書けるの?
自分は出来ても階乗を求めると型の判別くらいしか出来ない
- 793 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 12:16:05.35 ID:aWfB90DT.net]
- まずは脳内バッファを増やす訓練からだな
- 794 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 12:26:17.71 ID:8F/Sy9ZI.net]
- 関数型言語を勉強するといいよ
- 795 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 12:41:59.55 ID:9UC8tUq9.net]
- >>767
脳内バッファがなぜ必要? >>768 そうしてみる‥ Lisp読んで見る
- 796 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 13:29:44.46 ID:z3VJK4Uc.net]
- >>766
メタプログラムは今ほとんどconstexprに置き換えれない?
- 797 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 14:16:24.99 ID:9UC8tUq9.net]
- >>770
確かに置き換えられるんだけど、それじゃあ普通のプログラミングと変わらなくて面白みが無いと思って‥
- 798 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 14:39:49.94 ID:vEMT9LA3.net]
- >>770
型でメタプログラミングするとき困らんか?
- 799 名前:デフォルトの名無しさん [2018/08/14(火) 14:41:24.25 ID:UlU0qat0.net]
- >>772
もちろんtemplateも使う
- 800 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 16:24:16.29 ID:oKGdiTQg.net]
- >>760
特に何とは言わないけど return (123, "456"); とか return 123, "456"; みたいに現行のc++ではできないタプル表現のほうがすっきりして見える (個人の感想です)
- 801 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 16:31:09.91 ID:fJuFDfsp.net]
- 123には副作用が無いから最適化でreturn "456";になるんじゃ…
- 802 名前:はちみつ餃子 mailto:sage [2018/08/14(火) 16:32:25.07 ID:EPC9iky2.net]
- >>775
「できない」って話だから……
- 803 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 17:01:49.73 ID:zHCh+0V6.net]
- vector<object*>* list;
Fuga fuga; Hoge* hoge; for(int i = 0; i < 5; ++i) { fuga.fugaMethod(hoge->hogeMethod(list->at[i])); fuga.fugaMethod(hoge->hogeMethod((*list)[i])); // エラー } リストの要素に対して全部処理をするっていうよくあるプログラムなんです。 なんですが、上の書き方だと通るのに対して、下の書き方だと「式にはクラス型が必要です。」と出ます。 vectorの要素指定はa
- 804 名前:t(i)を使うか括弧で指定するかの2通り、違いは範囲チェックを行うかどうかだけという認識だったのですが……
何がまずいんでしょうか? [] - [ここ壊れてます]
- 805 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 17:10:49.55 ID:oMbBbcEB.net]
- list->at[i]はまずいだろ
typoか? それとも本当にそう書いているのか?
- 806 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 17:27:33.05 ID:8F/Sy9ZI.net]
- typoじゃないとしたら、上は通ってるんだから
hogeMethodの引数がobjectかobject&なんだろうな
- 807 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 17:31:42.31 ID:zHCh+0V6.net]
- えーっとtypoじゃないです。
何がまずいんでしょうか。ポインタだしアロー演算子で問題ないのでは。 それとhogeMethodの引数はobject*ですね。抜けてましたすいません。
- 808 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 17:49:25.24 ID:K29Njy0m.net]
- listの前の*が邪魔?
- 809 名前: mailto:sage [2018/08/14(火) 18:00:20.07 ID:5K5qKv3G.net]
- >>777
vector<string *>::iterator list; なら理解できるのですが、 vector<string *> *list; というのが、よくわからないのです プログラム例では list にすでに値が入っているようですが、実際には list をどのように初期化しているのでしょうか?
- 810 名前:782 mailto:sage [2018/08/14(火) 18:19:15.36 ID:5K5qKv3G.net]
- >>777
(*list)[i] (*list).at(i) list->at(i) は等価であることを確認しましたが list->at[i] というのは逆にダメっぽいです https://ideone.com/ripLji list->at[i] がどういう文脈なのか? コンパイラがなになのか情報をください
- 811 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 18:27:08.03 ID:oMbBbcEB.net]
- >>780
何がまずいって listはvector<object*>へのポインタ list->atはvector<object*>::atでメンバ関数 ここまではいいが at[i]は関数に添え字だろ こうやってんのと同じだぜ void func(); func[1];
- 812 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 18:32:33.03 ID:9UC8tUq9.net]
- なんでメンバ関数を配列にしたいのかかが気になる
- 813 名前:デフォルトの名無しさん [2018/08/14(火) 18:35:36.38 ID:zHCh+0V6.net]
- あ、すいません、確かにat(i)はtypoでしたね。
ごっちゃになってましたすいません
- 814 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 19:46:01.17 ID:TB9AjC50.net]
- >>786
> 確かにat(i)はtypoでしたね。 なら普通に両方コンパイルはできるはず エラーになる最小限のコードにしてどこかにアップして
- 815 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 20:00:34.01 ID:aWfB90DT.net]
- そんでだいたい最小化してるうちに気づくんだよなw
- 816 名前:デフォルトの名無しさん [2018/08/14(火) 20:01:24.90 ID:UKq+CNIv.net]
- 関数テンプレートの部分特殊化ってC++17でもできないの?
- 817 名前:デフォルトの名無しさん mailto:sage [2018/08/14(火) 20:08:30.24 ID:HhG+br3u.net]
- >>788
まあ本人気づくのが一番いいから
- 818 名前:782 mailto:sage [2018/08/14(火) 20:18:07.26 ID:5K5qKv3G.net]
- >>790
寛大ですね…
- 819 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 13:34:49.18 ID:bAZUebux.net]
- >>789
できない # いらんだろ、多重定義で同じ目的を達成できるから
- 820 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 15:58:12.56 ID:/VaqEwQY.net]
- 関数の多重定義もクラステンプレートの部分特殊化でstaticメソッドを特殊化したら代替できるからイラン
- 821 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 17:45:56.30 ID:bAZUebux.net]
- >>793
どゆこと? たとえば int abs(int); double abs(double); を、 クラステンプレートの部分特殊化でstaticメソッドを特殊化つーと template <typename A, typename B> struct num; template <typename A> struct num<int> { static int abs(int); }; template <> int num<int, int>::abs(int arg) { return arg < 0 ? -arg : arg; } みたいなことすんのか?
- 822 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 18:07:46.14 ID:GkoLimxd.net]
- 普通は関数オブジェクトにするんじゃね?auto operator()(...);
- 823 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 18:46:53.07 ID:GkoLimxd.net]
- あ、余計なこと言った。
https://dotup.org/uploda/dotup.org1613077.zip
- 824 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 18:48:12.11 ID:GkoLimxd.net]
- うご、投稿してモータ。
例のローグのシステムが大分できたのでなんとなく投下してみた。 汎用AIってどうやって書けばいいんや? しかも、まだバトルシステム作ってないし。
- 825 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 19:02:43.98 ID:GkoLimxd.net]
- ところで質問なんだけど、パスファインディングってサービスとして入れたほうがいいのかなぁ。。。
- 826 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 22:40:01.74 ID:QxvGNpoJ.net]
- >>766です
C++テンプレートメタプログラミングという本を買ってみたのですが、この本C++BoostのMPLの解説本です C++17がある今、この本の価値ってあるんでしょうか? 一応全部読んでみようと思ってるのですが
- 827 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 07:25:03.80 ID:t6OwQxX1.net]
- >>799
> 一応全部読んでみようと思ってるのですが 読んでみてから判断すれば?
- 828 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 08:19:40.35 ID:NceGg90N.net]
- 多分聞きたいのはこれ読んだらオラついていいですか?ってことだと思う。
- 829 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 08:50:47.25 ID:MDl/UAh8.net]
- >>800
>>801 すみません Boostを使わず、mplを使わないのでメタプログラミングするのが目的なので、それがこの本を読んで可能なのか?という質問の趣旨です
- 830 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 09:51:57.97 ID:t6OwQxX1.net]
- >>802
> Boostを使わず、mplを使わないのでメタプログラミングするのが目的 そんな明確な目標あるのになんでこんな本買うかなぁ ちょっとググればこんな意見が見つかるだろうに… ちょっと文章が直訳っぽくてところどころ不自然だけど,丁寧にBoost.MPLの実装(と使い方)について解説してあってとても分かり易い! d.hatena.ne.jp/eldesh/touch/20100412/1271090614
- 831 名前:はちみつ餃子 mailto:sage [2018/08/16(木) 10:25:53.58 ID:f3MTrlhW.net]
- >>802
メタプログラミングを活用すればこういうことも出来得るという事例集として見れば無駄ではないと思うが、 それを読んでメタプログラミングが出来るようになるかというと否だと思う。
- 832 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 12:02:41.09 ID:MDl/UAh8.net]
- >>803
この本を買ったのは高橋晶のC++11対応のテンプレートテクニックって本を読んで、巻末に本の紹介があって、メタプログラミングについて知りたいならこの本を読むべきって書かれてあって、読むことにした そのブログはすでに読んである >>804 メタプログラミング自体はどうすれば出来るだろうか?
- 833 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 12:37:43.15 ID:jOS7jxfN.net]
- 魔除けとして重宝している
- 834 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 12:41:22.12 ID:lxkNuozk.net]
- > そのブログはすでに読んである
私はバカです って言われても…
- 835 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 13:19:15.31 ID:MDl/UAh8.net]
- >>806
売ることにします‥ >>807 もう日本人に頼るのは辞めました そもそもWG21から情報を検索したほうが有意義かも これからは日本語のプログラミング書籍は買わない方がいいって教訓になりました
- 836 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 13:24:07.84 ID:AI90/kCO.net]
- 捨てゼリフ来たね
そろそろご退場かな 総員塩の用意
- 837 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 13:27:57.29 ID:MDl/UAh8.net]
- >>809
いやだって日本人でC++やってる人少ないじゃないですか(´・ω・`)
- 838 名前:はちみつ餃子 mailto:sage [2018/08/16(木) 13:47:10.99 ID:f3MTrlhW.net]
- >>810
んなこたーない。
- 839 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 14:10:22.64 ID:yO9+GMaw.net]
- 「少ない」に比較がついてないから何とも言えない
- 840 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 14:34:47.46 ID:jOS7jxfN.net]
- やっぱPerl人口が一番多いと思うのねん
その次がPHP
- 841 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 16:39:09.24 ID:TxXnQ6gb.net]
- 英語をスラスラ読めるなら「遅い・高い・分かりにくい」の
和訳版を買うことはないわな。 原書ならPDF版がタダでネット公開されてたりするし。
- 842 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 20:44:21.68 ID:JF8AnYsh.net]
- >>799
前半とこどこBoost.MPLの設計理念とかどう実装されてるかとか書いてあるから、そこは参考になると思う 後半のTMP関連のテクニックはおそらく求めているものではないかと ExpresionTemplateの実装にあまり踏み込まないけど、どのように誤用されているかは少し参考になった
- 843 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 11:29:50.85 ID:lqMuboYf.net]
- https://wandbox.org/permlink/TC3VtzZ4Dd53Z1Y4
こういうコード書きました。 UIはとりあえず置いといて、Jsonの構造ってこんな感じでいいのでしょうか。 ご意見あったら教えてください。
- 844 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 11:54:52.92 ID:BEBC5Dle.net]
- あの初歩的な質問で申し訳ないんですけど、クラスのメンバ関数のことです
例えばAってクラスがあって、hogehogeって関数があったとします それでhogehogeは内部で関数を3つ呼び出す。ざっとこんなイメージです A.h class A { public: void hogehoge(); } A.cpp void A::hogehoge() { x(); y(); z(); } main.cpp main() { A a; a.hogehoge; } んでこの場合の関数x() y() z()なんですけどクラスAのメンバ関数にすべきなんでしょうか。 それとも単にA.cpp内に関数書くだけでいいんでしょうか。 x()y()z()はhogehoge以外から呼び出されることはありません。 自分は前者だと思うんですが、参考にしろと渡された前任者(今いない)のコードだとなんでもかんでもメンバ関数です。 よろしくおねがいします。
- 845 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:01:22.82 ID:BEBC5Dle.net]
- あ、すいませんhogehogeではxyzを呼び出す以外にも処理を行うものとします
そうでないとxyzをメンバ関数にしてhogehogeなくせってことになるので
- 846 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:17:52.69 ID:TtX4VAeH.net]
- > x()y()z()はhogehoge以外から呼び出されることはありません。
だったらラムダ式じゃね? auto x = [this]{}; auto y = [this]{}; auto z = [this]{};
- 847 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:27:19.70 ID:6wrElEJt.net]
- >>817
どっちでも良い というか時と場合によってどっちにすべきかが違う
- 848 名前:デフォルトの名無しさん [2018/08/17(金) 12:29:57.76 ID:JC8oBFgD.net]
- メイヤーズは独立できるならメンバにせずに関数にしろって言ってた
- 849 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:31:59.93 ID:PQea+QN+.net]
- 言語処理ってphythonとC++どっちが向いてる?
- 850 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:37:52.08 ID:lqMuboYf.net]
- 処理内容によると思う。
一応、自分は、protectedのメンバ関数にするかなぁ。
- 851 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 12:49:54.76 ID:UZUA85Xq.net]
- >>822
漠然過ぎてどうとも ゼロから書く気はないんだろうから試行錯誤するのも含めてPythonのほうを勧めるよ
- 852 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 13:08:34.93 ID:KaaDwp63.net]
- >>817
関数にできるってことはメンバ変数の参照とか他のメソッド呼び出しがないんだよね なら関数にした方が微妙に速度が稼げる(thisを渡さずに済むから) 各々一回しか呼ばないなら呼び出し箇所に展開しても良いような気がする
- 853 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 13:39:31.71 ID:BEBC5Dle.net]
- 参考になりました。皆様ありがとうございました。
effective C++のメイヤーズ先生に従い、通常の関数にすることにします。 ……あれ、そうするとその関数群だけで使う共通の変数ってメンバ変数にすべきなのかcpp冒頭で宣言してグローバル変数にすべきなのか いやぁ難しいですね
- 854 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 13:59:24.66 ID:IJ2e6Mcr.net]
- データメンバーにしなさい
グローバル変数は悪である
- 855 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 14:21:39.44 ID:TtX4VAeH.net]
- >>826
「共通の変数を使う関数群」をクラス化するんだよ そのためにあるんだから
- 856 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 15:10:01.00 ID:ujK6h2XS.net]
- >>826
> ……あれ、そうするとその関数群だけで使う共通の変数 いや、そんなもんがあるならメンバ変数にするか、それらを構造体とかにまとめて引数で渡すとかしなよ ファイルスコープだとしても今時グローバル変数は無いわ
|

|