- 1 名前:デフォルトの名無しさん [2022/02/19(土) 11:56:42.14 ID:kSnJ/KwP.net]
- 前スレ
C++相談室 part158 https://mevius.5ch.net/test/read.cgi/tech/1636969758/
- 856 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 22:20:50.07 ID:wOH19oBO.net]
- えっstd::vector<T> hoge_; とやった場合Tが何であってもその場でhoge_のサイズは決まるから
struct Hogeのメモリレイアウトは鎧袖一触で決まるか ら何の問題も無い 決まらないのはhoge_のインスタンスがポインタで保持することになるヒープ上の領域のサイズであって struct Hogeのサイズは上述の通りstruct Hogeの定義を一通り見たとき鎧袖一触で決まっているから Hoge::hoge_をインスタンス化するタイミングで問題無くインスタンス化されるという印象のような希ガス いや知らんけど ※ 個人の感想です
- 857 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 22:33:18.09 ID:wOH19oBO.net]
- とオモタがなんかVS2019(C++14)で試したら以下のコードのビルドが通る怪現象やな……
template<class T, int N> class VarArr { int T[N]; }; struct Hoge { VarArr<Hoge, 3> m_arr; int m_x; }; Hoge x; 多分環境に拠るんだと思う
- 858 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 22:35:40.26 ID:wOH19oBO.net]
- VarArr<T, N>の定義をまつがえたサーセン……orz
以下のコードなら正しくビルドエラーになる template<class T, int N> class VarArr { T m_arr0[N]; }; struct Hoge { VarArr<Hoge, 3> m_arr; int m_x; }; Hoge x; ワイの答えはこれや!
- 859 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 23:14:48.08 ID:Mnzv/avn.net]
- >>839で適当に回答したけどメンバとしてを実体で持つかポインタで持つかで通るかが決まるな
- 860 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 23:38:16.75 ID:sNbs7j4z.net]
- struct Hoge
{ int a[sizeof(Hoge)]; }; はHogeがまだ定義されていないから、コンパイルできない だったら、なぜ std::vector<Hoge> hoges_; は許可できるんだ
- 861 名前:デフォルトの名無しさん mailto:sage [2022/04/03(日) 23:53:21.86 ID:dOp+WKyA.net]
- >>847
規格的に問題ないからだが、まあポインタなんでサイズ知らんでもええからだな
- 862 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 00:18:36.05 ID:F+M9/rKi.net]
- >>847
std::vector<Hoge> hoges_; はクラスないしstructのサイズには影響しないからじゃないの? そのクラスないしstructはstd::vector<Hoge> hoges_へのアドレスを保持するだけでしょ? クラスないしstructの中でのhoges_のサイズはすでに決まっている
- 863 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 00:23:58.82 ID:NuCanqg0.net]
- >>847
>>843に書いたが struct Hoge { std::vector<Hoge> hoge_; }; の実質は struct Hoge { struct { (&(hoge_[0])を指すポインタ); (管理用のいくつかのメンバ) } hoge_; }; とゆーことなのでstruct Hogeの中にhoge_[0..]の実体が埋め込まれるわけでは無いから、 hoge_[0..]の型が決まっていなくともstruct Hogeのサイズは問題無く決まるというしくみ 一方hoge_[0]の実体がstruct Hogeに埋め込まれる>>845のケースは気体どおりエラーになる というワケ
- 864 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 09:09:53.47 ID:14cK0a9Z.net]
- >>843
鎧袖一触の使い方間違いで草w
- 865 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 23:12:20.74 ID:JNKuDAOB.net]
- 4、5年c++やってるけどまともなものを作れない
どれくらいで、ネットで有名なソフトって作れるものなの? 例えばvscodeみたいな便利なアプリ
- 866 名前:デフォルトの名無しさん mailto:sage [2022/04/04(月) 23:46:47.47 ID:9GHqD2yn.net]
- >>852
VScodeはElectronつまりJavaScriptで書かれてるよね
- 867 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 00:26:55.67 ID:btSnYNGS.net]
- >>852
C++Builderが楽だよ
- 868 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 01:43:21.89 ID:QuV3GhxG.net]
- windowsは触ったことがない
- 869 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 02:00:35.56 ID:QYslDBWm.net]
- ならばElectronかTauriがオススメ
WindowsだけでなくMacでもLinuxでも動くマルチプラットフォーム
- 870 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 06:11:04.09 ID:PM3+0qST.net]
- >>852
言語だけ触ってても無理 自分は◯◯を作るんだという 一途な意思がいる ネットでウケるかどうかは通常どうにもできない もし市場の需要を読んで開拓ができるなら もうそのままプロになれる
- 871 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 10:33:40.77 ID:FcLzG6G8.net]
- >>852
まともって言うか一定規模以上のソフトを作ろうと思ったらオブジェクト指向デザインパターンを網羅していく事の方が大事 難しいハッキングをやるよりも設計の方がなんだかんだで難易度高いからな
- 872 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 17:09:26.03 ID:PM3+0qST.net]
- 「成功者」の法則をなぞるだけでは成果は出せない
そんなの誰でもできるから 形振り構うことより興味の向くまま突っ走るほうが肝心 そうして何かを成し遂げると自分なりの法則ができている それまで周りは散々バカにしてくれるが そんなのに折られないメンタルも大事だ
- 873 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 17:46:09.74 ID:YcgsN5By.net]
- メモリマップドファイルのライブラリが標準入りするのってまだまだ先ですか??
標準ライブラリとするのに何か問題でもあるの?
- 874 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 19:10:03.35 ID:Ssg9XCyk.net]
- <filesystem>ですら入ったの最近だしあんまり期待してない
socketとかのネットワークライブラリも標準にはないんだぜ?
- 875 名前:はちみつ餃子 mailto:sage [2022/04/05(火) 19:53:34.34 ID:AUzgrMft.net]
- >>852
個人でなんらかのソフトを作る場合には「動くプログラム」を意識するといいよ。 構想通りに設計しようとするよりは機能を極小に絞ってでも動く状態のプログラムを作ってみて、 それを拡張していくという形にすれば行き詰まったところが学ぶべきことが潜んでいるところだとわかる。 ある程度までいったら最初から作り直したくなるときがくる。 学びながら作ったものなんてろくでもないんだから作り直すはめになるもんなんだよ。 どうせ作り直すと割り切って色々やってみればいい。
- 876 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 20:56:02.32 ID:6DtMUNMI.net]
- Googleの人もイテレーティブな開発が良いって言ってたなあ
- 877 名前:デフォルトの名無しさん [2022/04/05(火) 21:08:43.94 ID:79YAP4SX.net]
- あーすべき、こーすべきと雁字搦めにPGを縛る硬直的で強迫的な教条主義が
投げやりなやっつけ仕事を大量生産するという
- 878 名前:ウ訓から色々な提案が出てるのに
教わったことにしがみつく後ろ向きな人が悪しき循環を継続させちまう [] - [ここ壊れてます]
- 879 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 21:15:39.04 ID:YcgsN5By.net]
- C++って他の言語と違って何でも出来るから情報収集に時間使いすぎるんだよな
プランAからZまであらゆる手法を検討して最善手を打たなければどこかで詰む事になる
- 880 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 21:15:57.95 ID:rM7yNqDT.net]
- 大昔の記憶だけどメモリマップというかネットワーク系のライブラリはC++に追加されないのかって聞いたときに
OS依存の仕様は実装されないって聞いた記憶あるけど最近のC++は方針変わったのか?
- 881 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 22:34:00.51 ID:QFtrY3nt.net]
- C++とSTLは別だよ
- 882 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 22:39:47.79 ID:vLZKRt0y.net]
- threadみたいにするならかまわんのだろ
- 883 名前:デフォルトの名無しさん [2022/04/05(火) 22:54:42.49 ID:79YAP4SX.net]
- プロセスがサポートされないアレでか
- 884 名前:はちみつ餃子 mailto:sage [2022/04/05(火) 23:18:25.53 ID:AUzgrMft.net]
- スレッドは OS が提供するスレッドと一対一で対応することを意図しているという記述がある。
https://timsong-cpp.github.io/cppwp/n3337/thread.threads#1 スレッドを持たないシステムに対応付けるならスレッドの生成に常に失敗するような実装になってても仕様には反しないんじゃない? noexcept は例外を送出しないことを保証するけど実行時エラーがないことを保証するわけではない。
- 885 名前:デフォルトの名無しさん [2022/04/05(火) 23:23:24.49 ID:79YAP4SX.net]
- 今さらDOSでC++11か
いや否定はできんけど・・・
- 886 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 23:31:23.00 ID:EtikemGC.net]
- プロセスを持ち出す意味がわからん
スレッドがあればいいんじゃ?
- 887 名前:デフォルトの名無しさん [2022/04/05(火) 23:37:46.31 ID:79YAP4SX.net]
- なんで?
アドレス空間の多重化とプロセス間通信はOSが違ったら移植性なしで割り切るの?
- 888 名前:デフォルトの名無しさん mailto:sage [2022/04/05(火) 23:42:47.00 ID:EtikemGC.net]
- それがないとスレッドも許されんという理屈がわからない
- 889 名前:デフォルトの名無しさん [2022/04/05(火) 23:52:53.92 ID:79YAP4SX.net]
- スレッドも許されないなんて主張してないが
- 890 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 07:13:16.72 ID:e/YNs2XJ.net]
- 質問ですがイテレータ間の距離はstd::distance<T>(first, last)で求められるそうなんですが
求めた距離を再びイテレータに戻す場合はどうすれば良いですのん?firstとlastがラ ンダムアクセスイテレータならfirst + std::distance(last, first) == lastが成立するという具合に 足せば良いけどランダムアクセスイテレータか否かによらず共通に使えるテンプレートは?
- 891 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 08:10:41.61 ID:tJlAug24.net]
- >>876 std::next() https://cpprefjp.github.io/reference/iterator/next.html
- 892 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 08:51:32.67 ID:hbDmvmaG.net]
- >>876
std::advance(イテレタ,求めた距離)
- 893 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 14:47:30.60 ID:/VxyOfiN.net]
- technical default とかいう新技が出てきたね
- 894 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:03:31.71 ID:OIlaSdNT.net]
- みなさん多次元配列ってどうやって持ってますか?
・blas, lapack等fortranの資源を使いたいからローメジャー、カラムメジャーは宣言時に決めたい ・添字アクセスがネイティブの多次元配列並みに早い ・STLコンテナみたいに使える 等の条件を満たす良いライブラリありますかね 本当はSTLに入ってほしいんですが、なぜ未だにないんですかね?
- 895 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:15:07.58 ID:Iu/ahyl1.net]
- ネイティブの多次元配列とは
- 896 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:18:59.68 ID:OIlaSdNT.net]
- >>881
ああすみません私めは言語障害者だから変な言葉使ってるかもしれません Cの多次元配列のことを変な呼び方をしてしまいました すみません
- 897 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 18:30:19.00 ID:aY4pnG+o.net]
- eigen gmtlとか?
- 898 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 19:07:48.95 ID:ofj8wLUE.net]
- 1つめがよーわからんけど
・次元数はコンパイル時決定 ・要素数もコンパイル時決定 ・子要素のサイズは全て同じ(arr[0].size()==arr[1].size() が常に成り立つ) ってことでええの? それなら単純にstd::array<std::array<T, 4>,5>でいいとは思うが
- 899 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 19:36:43.45 ID:vJ8PYFJ1.net]
- 全部arrayだとスタックに配置される事あるからvector<array>でやってるな
- 900 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 21:17:51.29 ID:tUlkAQY7.net]
- >>880
std::mdspanというのが提案中だがまだ時間かかりそう
- 901 名前:デフォルトの名無しさん mailto:sage [2022/04/06(水) 23:18:21.83 ID:NvxWnsbd.net]
- >>877 >>878
レスdクス やっぱいろいろ一般化されたテンプレートがいっぱいあったら テンプレートを特殊化せずに済む幅がひろがりんぐ、
- 902 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 03:17:05.89 ID:yw7pyl+g.net]
- >>883
eigenは遅い gmtlはメンテナンスされてない >>884-885 一次元配列にマップしたときの並び方が柔軟であってほしいって書いてるでしょ 外部ライブラリ必須じゃないかな現状 >>886 mdspanは実体を持たなくてmdarrayは実態を持つんだっけ C++23に入るって話じゃなかったっけ? 俺C++の新機能はそんなに熱心に追ってないけどこれだけは待望してる >>880 ということで、現状はboostじゃないかな これもメンテナンスされてないようだが、マシだと思う 良いライブラリがあったら俺も知りたい
- 903 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 03:34:21.33 ID:zyrTrwHF.net]
- 柔軟な多重配列なんて自分ですぐ作っておしまいな話なのに
なぜ標準にないとかライブラリがないと言い出したり将来の仕様に期待するとか意味不明
- 904 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 03:49:06.16 ID:g2f/LEmv.net]
- numpyを使う。もちろん他にpython併用する理由があればだけど。
ローメジャーなのでメモリ上での向きは個別にやってる。
- 905 名前:デフォルトの名無しさん [2022/04/07(木) 05:59:06.00 ID:kMhdBz2h.net]
- >>880
blas使いたいんならstd::sliceがモロそのものだよ
- 906 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 06:13:35.95 ID:yw7pyl+g.net]
- >>889
やってから言えや 例えば、高速なランダムアクセスとか添字の組と要素番号の間の高速なマッピングとか、どう実装するつもりでいるの?
- 907 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 06:17:36.20 ID:OOyqDhdW.net]
- あるクラスのコンストラクタがvector<int>をとるんだけど、たまにvector<size_t>を渡したいときがあるからオーバーロードするようにしたらambiguousだとエラーが出た
1) ambiguous にならない方法はありますか 2) vector<size_t>の各要素がintの範囲に収まるくらい小さいとき、これをvector<int>にキャストするナイスな書き方はありますか
- 908 名前:デフォルトの名無しさん [2022/04/07(木) 06:40:42.70 ID:kMhdBz2h.net]
- ambigousにはならんようだが
https://ideone.com/YrFYsI
- 909 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 07:18:15.48 ID:3YRGB6r4.net]
- >>892
自作すれば自分の使う方法に合わせてカスタマイズできるから圧倒的に有利 インデックシングも汎用だと毎回多段計算になるが自作なら用途に合わせて最適化できる
- 910 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 08:17:57.53 ID:CaxjwvsJ.net]
- ファイルならまだしもオンメモリーで高速なランダムアクセスとか言語の範囲では工夫しようがなくね?
- 911 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 08:32:07.21 ID:Ym/mh0iz.net]
- 近傍のアクセスが速いというのは言語関係ないしな
- 912 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 10:27:53.88 ID:2nzlX6cZ.net]
- そういえばSTLのコンテナに[]で範囲外アクセスしたとき、デバッグモードだとちゃんとアサート出してくれるけど
あれってSTL実装した人がそう書いたから出るの?それともOSの機能か何か?
- 913 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 10:32:39.68 ID:2HgVVA+6.net]
- 全てそう書いたから出るんだよ
OSはレイヤが違う話
- 914 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 10:39:14.99 ID:2nzlX6cZ.net]
- へえ、じゃやっぱマクロ使ってガシガシ書いてるんだろうね
自分じゃ絶対やりたくないなw
- 915 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 17:34:09.66 ID:mHsgrYEE.net]
- ifdefで括るだけだろ
- 916 名前:デフォルトの名無しさん [2022/04/07(木) 18:22:02.97 ID:kMhdBz2h.net]
- >>898
ルール上、保証がないことでも やってくれてることって、どこにでもあるだろ operator[](size_t)で範囲外アクセスした場合の動作は未定義なので どんな扱いをされても合法なんだよ # 一時期流行った気持ち悪い喩えはもうしない
- 917 名前:デフォルトの名無しさん mailto:sage [2022/04/07(木) 21:49:18.59 ID:6+zrl0OG.net]
- SNSの気持ち悪いノリ持ち込むなよ
- 918 名前:デフォルトの名無しさん mailto:sage [2022/04/08(金) 01:44:38.29 ID:jwLlCRWe.net]
- >>900
お客様根性丸出しのプログラマとか・・・
- 919 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:06:11.18 ID:NDf9sYGT.net]
- メモリが足らないから64ビットにするとかいうやつがいて
ソース見たら double hoge[300][300][300]; って笑った
- 920 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:37:31.78 ID:gSPSOhuN.net]
- 64bit化だけじゃ無理でしょ
スタックサイズを512MBぐらいにしなきゃ
- 921 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:47:10.70 ID:a9m8EYfT.net]
- ツッコミどころが違う…
32bitのままヒープに確保で十分だから
- 922 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:49:15.33 ID:jXZanj6A.net]
- ヒープを使って良いのはアマチュアまでだからな
- 923 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 13:53:57.22 ID:qQptZxW8.net]
- 世の中マシン性能で解決おじさんみたいなのばっかり
- 924 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 14:20:15.81 ID:erlZKZM8.net]
- >>907
それを言うなら32bitのままスタックサイズを増やすだけで充分だろ ソース変更要らんし
- 925 名前:はちみつ餃子 mailto:sage [2022/04/09(土) 15:54:11.32 ID:LbeQCC1G.net]
- デフォルトでのスタックサイズ上限がだいぶん小さめ (数メガバイト程度) になってるのは
基本的にそれで足りる、 なるべくそれで足りるように書けという暗黙の圧力だと思う。 必要に応じて柔軟に対処すりゃいいけど、最初からあえて逆らうべきでもないだろ。 なんでもかんでもスタックを使ってるとデバッガで追いづらいし、 流れを制御するための変数と処理する対象になるデータ (大抵はある程度に大きい) は分けたい。 回路設計に喩えると制御線と動力線を分けるみたいな感じ。 (わかりにくい比喩ですまんがあくまで感覚なのでこういう形でしか表現できない。)
- 926 名前:ハノン mailto:sage [2022/04/09(土) 16:35:28.22 ID:50hSXO1R.net]
- >>911
>回路設計に喩えると制御線と動力線を分けるみたいな感じ。 昔、試作基盤として、天地にべったり Vcc とアースを上辺と下辺に貼り付けて、間に島(ランド)をたくさん並べるっていうのを聞いたことがあります どういう名称だったか忘れちゃいましたが…
- 927 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 16:45:04.63 ID:erlZKZM8.net]
- おれおれコーディングルールを開陳されても困る
- 928 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 18:42:32.24 ID:njPxFZn6.net]
- >>906
笑ったって書いてあんじゃん また、笑った
- 929 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 19:24:26.54 ID:mI1Pq9ZL.net]
- 300が何の数字か知らんけど、それが変更や拡張で800くらいになったら溢れるんだから
64bitが必要って判断はなくはないでしょ 何の数字か知らんけど
- 930 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 19:56:02.24 ID:NDf9sYGT.net]
- >>915
君は本物のバカだな
- 931 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 21:01:35.50 ID:/RZJpXw8.net]
- 規格にスタックって出てくる?
- 932 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 22:53:29.39 ID:NDf9sYGT.net]
- 出てくるわけねーじゃん
バカですか?
- 933 名前:デフォルトの名無しさん mailto:sage [2022/04/09(土) 23:32:57.29 ID:lfgNvR7s.net]
- std::threadで作ったスレッドのスタックサイズは1 MBで
変更はできないら しい 今日日は仮想メモリがあるからなリ ッチなマシンなら……
- 934 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 01:07:52.01 ID:OW76vhVn.net]
- 標準ライブラリなんて普通使わないだろ
汎用的にしすぎてて、いらない機能が多いからやたらと遅いし
- 935 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 01:48:34.97 ID:vpYyJyBE.net]
- 標準以外なにをつかうんだ
- 936 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 04:47:34.93 ID:Fso6oKAR.net]
- _beginthreadex()
- 937 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 05:15:04.39 ID:RmTwSS8K.net]
- pthread
- 938 名前:デフォルトの名無しさん [2022/04/10(日) 05:58:59.81 ID:xcZwEbFY.net]
- <thread>で抽象化されていないOS特有の機能を使いたきゃAPI使うってだけ
- 939 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 11:29:27.51 ID:lpHEMRFm.net]
- >>921
大抵は自社でフレームワーク構築してるよ iostreamですら、includeしたプルリク蹴らられるし
- 940 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 11:37:41.44 ID:vpYyJyBE.net]
- >>925
被せるだけじゃなくて自作すんの?
- 941 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 11:57:59.43 ID:Np98oj9K.net]
- ちんちんシュッ!シュッ!シュッ!
- 942 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 13:14:21.25 ID:wqaUV7TG.net]
- >>921
OSのAPI直で叩けってことやろ 例えばCreateThreadならスタックサイズ指定できるし
- 943 名前:デフォルトの名無しさん mailto:sage [2022/04/10(日) 16:50:49.57 ID:8UzTPUX4.net]
- >>925
うちもstringとかコンテナクラスは全部自作してる 昔はプラットフォームがUNIXもあったりして、環境によってはSTL使うと コンパイルエラーになってたからな
- 944 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 06:43:40.41 ID:x3kzaSAd.net]
- 関数群をまとめたいときってクラスで切るべき? 名前空間で切るべき?
例えば sub1、 sub2 というサブルーチンがあって、これらが func1、func2 から呼ばれるときに、これらをまとめたいと思うんです
- 945 名前:デフォルトの名無しさん [2022/04/11(月) 06:51:36.36 ID:r64ZejsB.net]
- べきという言い方はあまり好まんが
関数間で連携させるならクラス 連携しない単なるグループなら名前空間 というのが俺がよく使う手だ
- 946 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 06:54:00.91 ID:sjzgKw67.net]
- > これらをまとめたいと思うんです
どうまとめたいんだよ…
- 947 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 12:12:27.70 ID:sxIacEU4.net]
- mc++d読んだけど、これが20年前以上に書かれたってことがすごいな
今となっては、当たり前のことをばっかだけど 当時は革新的だったんじゃないかな
- 948 名前:はちみつ餃子 mailto:sage [2022/04/11(月) 13:01:51.57 ID:7nQKgh0L.net]
- >>930
特定の範囲でしか使わない関数があるという意味? それだけの理由なら名前空間でもクラスでも分ける必要はない。 その翻訳単位で内部リンケージにしておけば十分だよ。 名前空間やクラスは外部に対してどう見せるかの問題なんだから 機能単位の中で階層を分ける必要はあんまりない。
- 949 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 15:33:36.87 ID:gXppguDy.net]
- そういや翻訳単位の管理として新しくモジュールがc++20から導入されたけど、使い心地どうかしらん?
既存コードもモジュール化した方がいいくらい便利だったりするのかしらん?
- 950 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 16:44:48 ID:bKclHLZw.net]
- >>930 >>934
staticおにいさん「class外、*.cppにstatic修飾して書く」
- 951 名前:デフォルトの名無しさん mailto:sage [2022/04/11(月) 19:36:19.35 ID:KtON6/oU.net]
- >>935
昨年末あたりにvisual studioで試したらどうやってもビルド通らなくて諦めたけど今もう使えるようになってるんかな
- 952 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 01:31:53 ID:EgjH8LRN.net]
- 実験した程度でしかないけど使えてたよ。
- 953 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 10:13:21.46 ID:5vVn8Fqf.net]
- >>934
その翻訳単位がグローバル領域だったら? って意味でしょ
- 954 名前:はちみつ餃子 mailto:sage [2022/04/12(火) 11:04:00.65 ID:5njWaFr4.net]
- >>939
言いたいことがわからない。
- 955 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 16:43:20.82 ID:qoqTD/fb.net]
- dfs とか bfs みたいな名前の関数はそれを呼ぶ関数とまとめたくなるよね分かる
関数内関数にすると他の関数から呼べなくなるしな 名前を変えよってのはナシなw
- 956 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 17:25:13.49 ID:nzV1CUkS.net]
- モジュール……
- 957 名前:デフォルトの名無しさん [2022/04/12(火) 17:51:32.45 ID:RKLCiqJK.net]
- アホな質問かもしれないのですが……
今までユニークポインタで実体領域確保していたクラスを、どうせ一つしかnewしないからと、クラス内部に自身型の静的変数を保持して使用する方法へと変更しました。 所謂シングルトンに似た感じのものだと思うのですが。 std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>(); ↓ static Hoge& GetInstance(){static Hoge temp;return temp;} 使用する分には問題ないのですが、実体化させたいクラス数が多く、結果的には静的変数のガズが増え、実体がグローバルに多数存在する状態になってしまっていると思います。 この場合、名前衝突以外に何か想定される不具合はありますか? データを保持させるクラス以外は全てこれに置き換えようと思っているのですが、今までnewして使っていたため何か罠があると思えてなりません。 この方法はクラス名から実態を呼び出せて私に大変便利です。
- 958 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 18:22:24.95 ID:fdFUG1QI.net]
- >>943
ないです
- 959 名前:蟻人間 mailto:sage [2022/04/12(火) 18:27:41.73 ID:Dt0TGPDO.net]
- >>943
マルチスレッドじゃないよな
- 960 名前:デフォルトの名無しさん [2022/04/12(火) 18:29:33.15 ID:RKLCiqJK.net]
- >>944
ありがとうございます! >>945 違います! 無さそうで安心でした
- 961 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 18:39:03.10 ID:FTlcB8DO.net]
- クラス外側でtemplate実装にしろよとは思うが
template<class T> inline T Instance; int main(){ Instance<Hoge>.Execute(); }
- 962 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 19:21:11.76 ID:72/2frZ9.net]
- static ローカル変数が定石じゃないの?
- 963 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 20:27:31.77 ID:vgUv52EM.net]
- は?
- 964 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 20:30:19.09 ID:X1V1J1VK.net]
- 経験的にはどうせ静的なら変に隠さずグローバル変数の方が使いやすいです
- 965 名前:デフォルトの名無しさん [2022/04/12(火) 21:36:16.25 ID:RKLCiqJK.net]
- ちょっと皆さんの言ってることがよくわからないのですが……
テンプレートにして有効範囲で使用する、グローバルでいつでも呼び出せるようにする ということでしょうか? 使用を想定しているのは膨大なデータのコンプレックスではなく、外部データ加工用に少量のローカル変数を持たせたクラスなので、実体はひつとで大丈夫だと思います。 その際には、衝突を考えないならば、グローバウに無造作に置いた方が使いやすいよ、ということでしょうか?
- 966 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 22:13:59.90 ID:oNokQpOT.net]
- 左再帰が無限ループになる理由を教えて
- 967 名前:蟻人間 mailto:sage [2022/04/12(火) 23:03:12.33 ID:Dt0TGPDO.net]
- >>952
実引数と戻り先アドレスをスタックに繰り返し積むから。
- 968 名前:蟻人間 mailto:sage [2022/04/12(火) 23:31
]
- [ここ壊れてます]
- 969 名前::14.39 ID:Dt0TGPDO.net mailto: 積んで解放しないから。 []
- [ここ壊れてます]
- 970 名前:デフォルトの名無しさん mailto:sage [2022/04/12(火) 23:39:21.85 ID:EarvAF13.net]
- 停止しないから無限ループする
…って酷い理由だな
- 971 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 00:21:12.99 ID:bubjF7cO.net]
- じゃあ停止するかどうかを判定する汎用ルーチンHを作ればいいんだよ。
- 972 名前:947 mailto:sage [2022/04/13(水) 01:25:51.41 ID:qfz8Xp88.net]
- >>951
シングルトンを確保しておくためだけにstatic関数が10も20も並ぶのがアホくさいじゃん? template 1つだけ書いておこうよって意図で書いた。 が、>>951 のように一時変数として使うならローカル変数にして使い捨てるべき。 グローバル変数(>>943 もやってることは同じ)を使うデメリットは調べればすぐ出てくる
- 973 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 05:51:58.22 ID:8pcHyiAe.net]
- staticにインスタンス入れるやり方だとマルチスレッドマルチプロセスにした時すぐ破綻するから大き目の定数入れる以外には使ってないな
- 974 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 08:11:33 ID:ZQqXT36F.net]
- グローバル変数は初期化順序が環境依存になる問題があるから、
呼び出し順序で初期化するインライン関数のstaticローカル変数の方が扱いやすい という話があったかと思うけど、最近は回避するテクニックできたの?
- 975 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 09:44:11 ID:abmOAw0D.net]
- >>959
それでも競合は起きうるよね 排他制御は必須
- 976 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:25:01.35 ID:2DJG1h+b.net]
- 相談
抽象的なノードクラスがあり、上流ノードから下流ノードが接続され情報を取り出したいとする この時、接続時に上流ノードの出力タイプと、下流ノードの入力タイプが符合するかどうかを調べたい 今考えている実装方法としてenum型でタイプを列挙しておき、ノードの出力属性としてもたせ 入力に必要な属性を接続時に調べておく方法 シンプルでベストかなとは思うが、タイプが増えていくとその管理がやや大変かと思う 文字列で符合させるやり方も考えたが、例えば"int"と"integer"とかでごちゃごちゃしそう なにか妙案があればお聞かせ願いたい
- 977 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:28:21.90 ID:CyvaZh5F.net]
- 抽象的でわからん
- 978 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:36:53.86 ID:2DJG1h+b.net]
- すいません、もうちょっと自分で考えて相談点まとめます
- 979 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 10:44:17.47 ID:zii+x7Ds.net]
- それぞれのスレッドでは個別だけど スレッド内では唯一のインスタンス
スレッドをまたいでも共通で唯一のインスタンス あたまがこんらんする
- 980 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 12:06:05.65 ID:IuPW2iUE.net]
- >>961
どのみち符号の管理・徹底は必須だから、文字列で符号化し、表とかにまとめてバージョン管理・周知徹底する。 protocol bufferとかでインターフェイス管理すれば少しは楽かね。 protocol buffer以外だとなにがいいかしらん?
- 981 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 12:12:18.93 ID:5KnL277L.net]
- // A と Bのところだけが異なるfとf2
// うまくこの関数をまとめれませんか? #include <iostream> #include <vector> #include <algorithm> struct Foo { void Func() const {} }; void f(const std::vector<Foo>& vf) { std::for_each(vf.begin(),vf.end(), [](auto&& f) { f.Func();//A } ); } void f2(const std::vector<Foo*>& vf) { std::for_each(vf.begin(),vf.end(), [](auto&& f) { f->Func();//B } ); } int main( int argc, char *argv[] ) { std::vector<Foo> vf; std::vector<Foo*> vfp; f(vf); f2(vfp); }
- 982 名前:蟻人間 mailto:sage [2022/04/13(水) 12:20:05.74 ID:+YltrYoo.net]
- std::vector<Foo*>
std::vector<Foo> のインターフェイスに共通部分がない。アキラメロン。
- 983 名前:947 mailto:sage [2022/04/13(水) 13:02:01 ID:sgl3F80B.net]
- type_traitsで殴ればいけそう
template<class T> auto& to_reference_if_pointer(T&t){ if constexpr(std::is_pointer_v<T>){ return *t; }else{ return t; } } to_reference_if_pointer(f).Func();
- 984 名前:はちみつ餃子 mailto:sage [2022/04/13(水) 13:12:01.75 ID:qCcEdGhE.net]
- >>965
https://kaitai.io/
- 985 名前:デフォルトの名無しさん [2022/04/13(水) 18:00:26 ID:m7JtDTD6.net]
- >>957
今実機で確認して、インライン化したテンプレートをヘッダーに咥える方法が自分にとって良い事を確認しました! ありがとうございます。 いちいちスタティック咥えるより良いと思います。 マルチスレッドは使用したことがないのでわかりませんが、なるべき勉強してみたいと思います。 皆さんありがとうございます!
- 986 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 18:15:56.73 ID:I4ieD//T.net]
- >>966
std::for_each(vf.begin(),vf.end(),std::mem_fn(&Foo::Func)); または for (auto &&x : vf) { std::invoke(&Foo::Func, x); }
- 987 名前:デフォルトの名無しさん [2022/04/13(水) 18:28:24 ID:U0E88zpG.net]
- オマンコハンター チンポマン!
股間の銃を携えて今日もおまんこ狙い撃ち
- 988 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 23:40:49.30 ID:grUsXYkY.net]
- >>971
ラムダが消されてて笑った
- 989 名前:デフォルトの名無しさん mailto:sage [2022/04/13(水) 23:53:02.59 ID:nvVh9cdQ.net]
- >>967
↑ スキル低っ
- 990 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 07:29:49.75 ID:Qd4x1CZh.net]
- シングルトンは要らない子、とヴァカにしていたが
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不 定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた OSのwrapperを書いて、main()でそれを初期化することにして グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
- 991 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 07:33:43.77 ID:Qd4x1CZh.net]
- 訂正orz、
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン 正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン ← まんまシングルトン
- 992 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 08:28:49 ID:79II+WyL.net]
- 別にシングルトンじゃなくても単に起動時に初期化して渡せばええやん
- 993 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 09:59:18.13 ID:wwxSZsaE.net]
- いや要るでしょシングルトン
何らかのリソースマネージャ作るときとか避けて通れないし
- 994 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:35:30.42 ID:dlHUY+WK.net]
- >>977
初期化順序の問題って回避できたっけ?
- 995 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:40:07.14 ID:79II+WyL.net]
- mainでリソース用意しろという話よ
ライブラリだったら初期化用になんか叩いてもらえ
- 996 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:47:06 ID:rsrkTEkU.net]
- グローバル変数をポインタにしておいてmainでnewとか
friend int main(int, char**); とか?
- 997 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:56:36 ID:79II+WyL.net]
- なんでグローバル変数にこだわるんだよ
- 998 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:58:53 ID:dlHUY+WK.net]
- >>980
シングルトンより制限多くてメリット感じないなぁ。 マキャベリスト対策は難しいかもしれないけど、マーフィーに呪われないように運用で回避するのは最後の手段にすべき。
- 999 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 15:09:30.09 ID:4tVKG4Xu.net]
- 1個でもグローバルなりがあると
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
- 1000 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:01:53.91 ID:he9C7sX7.net]
- >>981
> グローバル変数をポインタにしておいてmainでnewとか > friend int main(int, char**); とか? それは最初にやったがブ
- 1001 名前:ツがOSのwrapperなのでカッコワルダサいと思い考え直した
結果がマルチスレッド対応を含まないライトなシングルトンの適用 >>980 main()に入ってから初期化するというだけでは初期化が間に合わないケースがあるから何とかしたいという話 [] - [ここ壊れてます]
- 1002 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:06:58.93 ID:xDiQzMrD.net]
- mainの実行より前に意味があることしようと思ったらコンパイル時しかなかろうよ
- 1003 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:13:00.39 ID:he9C7sX7.net]
- >>986の主観の話をしているのではない件について:
- 1004 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:22:10.66 ID:xDiQzMrD.net]
- >>987
お前のグローバル変数愛は主観じゃないんかいな もっと崇高な何かがあるのか
- 1005 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 04:08:04.71 ID:sm6VHVYM.net]
- 静的ストレージは実装と心中するプログラム以外マジでやめといたほうがいい
移植性が大幅に低下する
- 1006 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 04:23:41.78 ID:1Y3hD0GJ.net]
- グローバルやstaticな変数を使用する時は排他制御を必ず行なう
これを厳守していれば使っても大丈夫です もちろん使わずに済む別の方法がある時は別の方法を取るべきです
- 1007 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 06:36:24.15 ID:he9C7sX7.net]
- >>988
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない ・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする ・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?! >>990 >グローバルやstaticな変数を使用する時は排他制御を必ず行なう まあそれはそう。今回排他制御を避けられるのは >main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから >OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要 というktgi行為が無いことの条件付き。
- 1008 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 07:35:15 ID:xDiQzMrD.net]
- >>991
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
- 1009 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:15:20.73 ID:xhqbcuaF.net]
- >>991
c++11から静的ローカル変数の初期化は自動的に排他制御され、スレッドセーフとなる[10]。 だって。 シングルトンパターンの何を問題視しているんだっけ?
- 1010 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:29:52.88 ID:y04/Kx9U.net]
- 自分で記述するだけならどうとでもなるけど
他人に使ってもらう前提だと 限度はあるにしても色々防護策を講じたくなるのもわかる
- 1011 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:31:14.00 ID:xDiQzMrD.net]
- モジュールの結合度を評価するのにまず排他がどうとか気にするもんかね?
- 1012 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:40:46.42 ID:WMzvufu2.net]
- C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
- 1013 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:43:44.23 ID:ZcCJtqdn.net]
- >>995
それとは独立の問題 並行&並列でも動くことが現代では求められているため 一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる 厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
- 1014 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:44:18.42 ID:wykOop5a.net]
- >>994
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
- 1015 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:44:58.60 ID:wykOop5a.net]
- >>997
>>993
- 1016 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:49:06.65 ID:xDiQzMrD.net]
- >>997
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
- 1017 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 54日 20時間 52分 24秒
- 1018 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|