C++相談室 part138

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スフッ Sd9f-fGne)
垢版 |
2018/08/05(日) 18:02:36.57ID:DigzqJtZd
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137
http://mevius.5ch.net/test/read.cgi/tech/1531558382/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2019/09/29(日) 00:42:57.02ID:7gP8emxb0
名前が衝突した異なる型として
2019/09/29(日) 00:49:05.52ID:sIVLKl19a
ちょっと関係ある話なんだけどマングリングていう単語、なんかちょっとエロ要素あるよね
2019/09/29(日) 01:54:53.34ID:hPYugyVf0
pimpleやるときは前方宣言無いと辛いと思う。
2019/09/29(日) 02:00:50.57ID:hPYugyVf0
前方宣言でclassとstructが違うとユーザーコード書くとき気持ち悪くね?
2019/09/29(日) 07:26:51.75ID:MP9GBJ110
ピンプるときは宣言を書いたのと同一人物が定義も書くだろ
そこで間違えるとしたら相当に頓馬なやつだぞ
自分の癖さえ忘れるのは認知症だぜ

# hashを特殊化するときなんかは間違えないように気をつけている
2019/09/29(日) 09:31:02.95ID:sih8o/+S0
>>498
むしろ、完全定義されていない限りメンバ関数もメンバ変数も何一つ
使えないために、private/publicのデフォルト・アクセス属性の違いの
影響がでないからこそ、完全定義より前の不完全定義は、structと
classの違いを問わないでいいとも考えられる。
2019/09/29(日) 12:45:52.46ID:7gP8emxb0
>>504
型付き言語は型に関するプログラマーの間違いを指摘するのが優先
型推論が行えるときに型推論してタイピング量を減らせる手段「も」提供するのが第二優先
この優先順序を取り違えて良いものなら型無し言語を選択するほうが合理的である

つまり型付き言語のコンパイラーが型の誤り(デフォルト公開属性がpublicなstructとprivateなclass間の誤り)を
許すような振る舞いをするのは、現実に問題にならないとしても、道理に合わない

型の名前だけ宣言したくてclassかstructかの違いはどうでも良いなら、そういう意味のキーワードが用意されるべきなんじゃ
2019/09/29(日) 12:53:43.24ID:C35/CdkS0
classに関するc++の言語仕様とそのグレーゾーンのコンパイラ依存の話であって
型付き言語のあるべき論語ったところでしょうがないでしょ
本来言語仕様でstructとclassは型的に同じか否かが明言されてればそれで終了の話
道理はどちらでも通る
2019/09/29(日) 13:01:37.41ID:OYiClG3B0
言語仕様上は同じであることが明記されているし、それは書籍やweb上でも触れられている
重箱の隅ではなく常識として理解していたのだが

同じだと覚えて、その通りに使ったのに、msvcに移植する段になって奇妙な現象として実体化するのが問題
2019/09/29(日) 13:14:20.90ID:7gP8emxb0
>>506
>classに関するc++の言語仕様とそのグレーゾーンのコンパイラ依存の話
non
カプセル化の遵守を口にしつつ、前方宣言の記述をちょっとサボりたいがだけのために
デフォルト公開属性がpublicなstructと
デフォルト公開属性がprivateなclassをad-hocに同一視するええかげんな体系が有り得るのかという話

同一視する意図が無くかつ名前だけの前方宣言をしたいならば、名前だけ宣言する意味のキーワードでやれば無問題
無理矢理別の意味がまとわりついたキーワードを流用するのでは
コンパイラもコードを書いたプログラマーも表現を全うしたことにならず気持ち悪かろう
2019/09/29(日) 13:15:48.60ID:7gP8emxb0
>>507
>言語仕様上は同じであることが明記
同じ「型」であるというソースキボン
2019/09/29(日) 13:17:48.47ID:C35/CdkS0
>>508
gcc/clangでは通ること把握してるか?
2019/09/29(日) 13:29:13.33ID:C35/CdkS0
>>508
> カプセル化の遵守を口にしつつ、前方宣言の記述をちょっとサボりたいがだけのために

なんかお前は大きな勘違いしてる気がしてならないんだけど
前方宣言でclassと書こうかstructと書こうがカプセル化に何も影響ないだろ
なにがサボリなんだ?
classのかわりにstructと書いたらむしろ1文字多いのだが
2019/09/29(日) 13:32:40.67ID:qbYXpMyS0
C++例外の功罪について騙りたい。
2019/09/29(日) 13:37:04.22ID:k4CvVXqN0
>>512
語るのはいいが騙るなよ
2019/09/29(日) 13:39:29.17ID:k4CvVXqN0
>>508
C/C++には安易に予約語を増やさないというポリシーがあったと思うし、こんなレアで下らない例外ケースのために予約語を増やすのは賛同されないだろうよ。
2019/09/29(日) 13:40:32.98ID:eQVILPNx0
>言語仕様上は同じであることが明記されているし、
これが本当なら、とっくに規格厨が該当箇所を引用してくれてそうなんだけど
2019/09/29(日) 13:54:55.39ID:sih8o/+S0
>>508
>カプセル化の遵守を口にしつつ、前方宣言の記述をちょっとサボりたいがだけのために
不完全定義の主な目的は完全定義をサボるためではありません。
自己参照や、2つの構造体 A, B が有った場合、お互いに互い違い
に参照したい場合にどうしても必要だったので、pure C の時代から用意されて
いました。なお、ここでの参照とは、ポインタ * による参照です。pure C の
時代には、C++の & による参照はありませんでしたので。
2019/09/29(日) 13:58:57.67ID:UVnMNq400
https://timsong-cpp.github.io/cppwp/n4659/dcl.type.elab#3
> ..., the union class-key shall be used to refer to a union, and either the class or struct class-key shall be used to refer to a class declared using the class or struct class-key.
2019/09/29(日) 14:12:32.56ID:sih8o/+S0
>>516
訂正。自己参照は間違いでした。
完全定義すれば、予めの不完全定義がなくても自己参照が可能ですから。
不完全定義が必須なのは互い違いの参照です。
2019/09/29(日) 14:21:31.78ID:qdFsd7WD0
>>507
> 言語仕様上は同じであることが明記されている
どこに書いてあるの?
お前の脳内か?w
2019/09/29(日) 14:25:33.96ID:sih8o/+S0
>>518
再訂正です。
pure C だと、タグ名だけでは型名にならず、class key を直前に書く必要が
ありました。つまり、struct Aaa {・・・} という完全定義の場合、
・・・の部分で自己参照をする場合、C++ だと Aaa *pX; で良いのですが、
pure C だと struct Aaa *pX; と書く必要があります。だから、こんな感じに
書く必要がありました。
struct Aaa {
 struct Aaa *pX;
 ・・・
};
これは書くのがめんどくさいので、多くの人が
typedef struct _Aaa Aaa;  // 不完全定義と typedef の組み合わせ
struct _Aaa {
 Aaa *pX;
 ・・・
};
としていたのです。そのために、自己参照のためには、不完全定義が
ほぼ必須となっていたのでした。C++の場合は、typedef しなくても
class key なしのタグ名そのものが型名としても使えるので上記の様な
ことが必要なくなり、自己参照では不完全定義がいらなくなったのです。
521デフォルトの名無しさん (ワッチョイ bfad-S/NQ)
垢版 |
2019/09/29(日) 14:26:04.79ID:qbYXpMyS0
「カジュアルに警察や救急車呼ぶ」が物議 「適切な通報」か「ただの自己中」なのか? | キャリコネニュース
https://news.careerconnection.jp/?p=41755

C++例外をthrowすることの是非論に近いものがあると思う。
2019/09/29(日) 23:03:45.90ID:X3J8cFgd0
そんなにどうしても例外について話し合いたいならこちらへどうぞ
https://qiita.com/notenopg/items/40571e69986a58b888a0
2019/09/29(日) 23:55:06.58ID:OYiClG3B0
>>519
517じゃないの?
2019/09/30(月) 01:03:02.50ID:nHYsjKbQ0
つかお前ら解散して、本スレに行け。邪魔だ。
日本語読めない馬鹿韓国人>>488もな。

C++相談室 part145
https://mevius.5ch.net/test/read.cgi/tech/1568362404/


お前らの言うとおり、お前らと話しても時間の無駄だ。
文句を言われながらいちいち教えてやる意味はないから当然止める。
俺が422への講評を投稿することはない。タダ乗り狙いの馬鹿共はさっさと本スレに行け。
ただそれ以前に、俺がいくら書いてもどうせ読めないし、技術的にも理解出来るレベルにない。
正直、ここまでお前らが馬鹿だったのには驚いた。

ここで乗ってこないからお前らは馬鹿のままなんだ。聞くは一時の恥、聞かぬは一生の恥だ。
お前らは自分が馬鹿にされるのが怖くて何も言い出せず、安全地帯からクレクレ君だ。
ゆとりはネットの使い方を根本的に分かってない。
デジタルネイティブだから分かっていると勝手に信じ切っているが、それは完全な勘違いだ。
お前らは、今日ネットに向かって何か書いた後、書く前と比べて少しでも成長しているか?

コードを読む/書くのに時間がかかるのなら、それはお前らのプログラミング能力が足りないからだ。
それはやれば上達するし、やらないと上達はしない。つまり、やれば実になるものだ。
お前らゆとりはそういう地道な練習をしようともせず、ここでひたすら罵詈雑言だ。
それで何か得た物があったか?
こういう機会に地道にコードに向き合っている奴とはどんどん差が付く。そして今がある。
お前らはレベルの低さを自覚した方がいい。
そしてC++だけやっていても『今風の』プログラミングは学べない。それも知っておいた方がいい。
2019/09/30(月) 01:26:18.80ID:29SpHEC8a
(今風のプログラミングって何だろう?)
2019/09/30(月) 02:19:28.56ID:yat9MmGu0
スマートポインタの積極利用でしょ。
2019/09/30(月) 19:20:32.40ID:h36FzTTWa
C言語で今風プログラミングしてください。
2019/09/30(月) 19:29:26.35ID:d3KN1ocd0
C言語で今風のスクリプトのインタプリタを実装します
スクリプトでプログラムを書きます
2019/09/30(月) 20:29:16.61ID:ajIYYysl0
> 文句を言われながらいちいち教えてやる意味はないから当然止める。

ああやめろ
おまえ自分の言ったことちゃんと実行しろよ

どうせ三日坊主で我慢できなくなってしゃしゃり出てくるんだろうけどよw
2019/10/03(木) 20:02:50.87ID:pspZZwZs0
ならクラス分けのやり方に役立つ知識をくれ!!!!
2019/10/03(木) 23:48:30.19ID:doxd0JNA0
自分の中の知識や経験からくる予断にひきずられずにそのプログラムの仕様・要件にのみ従って設計すんだよ
2019/10/04(金) 08:24:01.39ID:MVQV/kgg0
それは無理
つーか動きゃいいんだって態度の素だぞそれ
1つの目標に対して複数の実現手段がある中から
どれがベストかという判断は知識や経験によるところが大きい
2019/10/04(金) 09:31:44.81ID:2obfK/LZM
それホントにベスト?
2019/10/04(金) 09:49:11.29ID:MVQV/kgg0
何を基準にベストというかも知識と経験によるところが大きい
2019/10/04(金) 10:31:32.01ID:1z0FSbuq0
まぁでも動きゃいいんだよ
すくなくとも動かないより大分良い
後、変に拘ってて糞みたいなやつより
素直なのがいい
2019/10/04(金) 11:21:14.02ID:MVQV/kgg0
動かないのは論外
論外でなくなっただけで慢心するやつは
他人の批評に聞く耳を持たないオナニー小僧だ
プロの職人は客の反応に関心がある
2019/10/04(金) 12:12:57.31ID:8yIxxMU30
この国のソフト屋にどれだけ職人がいるってのよ
大半がただの土方じゃねえか
2019/10/04(金) 12:24:43.08ID:MVQV/kgg0
おまえ土方をバカにしてんの?
2019/10/04(金) 12:32:18.96ID:TDKY2TUM0
多くの土方がいるからこそ職人が存在しうる
技術力の高い土方=職人
とするなら職人を増やすには土方を増やすべき
2019/10/04(金) 12:56:55.05ID:8yIxxMU30
職人になるのは職人見習いであって土方ではない
どこの業界でも同じ、エリートと人手要員とでは入り口が違う
2019/10/04(金) 13:00:57.26ID:MVQV/kgg0
くだらん言葉遊びだ
土方を馬鹿にするくせに同じ仕上がりのものをてめえは作れねえのを忘れてやがる
それが立場が逆でもわからないとしたら相当な知恵遅れだ

まあおそらく逆の立場になったことのないゴミニートだろうがな
2019/10/04(金) 13:13:06.36ID:1z0FSbuq0
>>536
オナニーやろうってのは無駄に拘ったコード書くやつのことだよ
2019/10/04(金) 13:14:16.00ID:MVQV/kgg0
>>542
無駄かどうか、おまえさんはどんな基準で線引いているんだい?
2019/10/04(金) 13:22:56.82ID:1z0FSbuq0
そんなこと自分で考えろ
2019/10/04(金) 13:27:33.21ID:1z0FSbuq0
これはあくまで国語の問題で
「動けばいいんだよ」的なことをオナニー野郎とは言わない
オナニー野郎ってのは珍妙なカラクリを作って喜んでいるやつのことを言うんだ
2019/10/04(金) 13:29:36.40ID:1z0FSbuq0
珍妙カラクリオナニー野郎に比べれば
特にこだわりのない「動けばいいんだよ」の方が
まだマシ
2019/10/04(金) 14:43:29.74ID:TDKY2TUM0
>この国のソフト屋にどれだけ職人がいるってのよ
>大半がただの土方じゃねえか
ソフト屋に職人と土方が含まれてるように自分で言っといて入り口が違うとか意味がわからん
2019/10/04(金) 16:04:51.75ID:MVQV/kgg0
もしかして頭が昭和のまま更新が止まったジジイか?
俺と同じバーによく来てる土木の土方さんなんか
下手なホワイトカラーより高収入だぜ
今はそんな時代なんだよ
てめえじゃ何もできねえハリボテ野郎のフカしが通用する時代じゃねえ
2019/10/04(金) 16:32:24.34ID:uYF9K7e8M
>>546
現在だけを見たらお前の言う通り
ただ「動けばいいんだよ」は10年後もそのままだけど「珍妙カラクリオナニー野郎」はたまに化ける
2019/10/04(金) 16:49:12.89ID:MVQV/kgg0
オナニー小僧って言われて発狂してるやつ
嫁の来手がないまま白髪が目立つようになったり光ったりしちまったの?
551デフォルトの名無しさん (エムゾネ FF0a-MsYi)
垢版 |
2019/10/04(金) 16:55:37.44ID:FW+Y/3wmF
白髪ならまだマシなビル
ちんこ勃たないレベルになるで
2019/10/04(金) 20:03:47.39ID:5CiM54x6H
>>551
それは深刻ですね…
2019/10/09(水) 23:24:31.98ID:aOv+d3Mp0
c++にはじめてさわったとき、クラスなるものに触れてシングルトンパターン凄くね!?と思ってたんだけど、スタティックと何が違うねんってなった
必ず生成されるか使われたときにはじめて生成されるかしか差がない??
2019/10/09(水) 23:30:02.37ID:5KUwoER40
classベースにしておけば継承なりなんなりOO的な設計手法が使える
でもシングルトンをすごいと思う感性におどろくわ
2019/10/09(水) 23:56:26.11ID:aOv+d3Mp0
>>554
値の変更を許さないってやるやん!?
用意にアクセスさせないやん!?これがカプセル化の極意か!!!とか思ってしまった
2019/10/10(木) 00:21:57.56ID:uUO69neG0
本当に1つだけなら静的変数でいいのよ
2以上の「n個まで」をやりたい時がシングルトンの使いどころ
「シングルトン」て名前がよくない
2019/10/10(木) 00:31:49.11ID:nZt6KVUa0
>>556
シングルトンなのに2以上になりえることあんの??
継承??
2019/10/10(木) 00:54:16.71ID:sP1rZpbe0
静的変数はスコープが限られてるけど(あるいはグローバル汚染するけど)
シングルトンなら使いたいところだけで使えるのがメリットだと思ってた
2019/10/10(木) 08:42:21.73ID:aZnaY5Is0
「使いたいところで使える」はメリットに見えてかなりのデメリットだぞ。
2019/10/10(木) 08:53:26.94ID:CaBqL/ld0
他インスタンスを生成させないことじゃないの?
静的変数だと別インスタンスが生成できちゃう
2019/10/10(木) 18:23:19.99ID:A25jV+I2p
シングルトンの使いどころはマルチスレッドでリソース共有をしたい場合だぞ

代表格はロガー

マルチスレッドでない場合や、一つのオブジェクトからしか使われない場合は、他のやりようがある
2019/10/10(木) 18:28:51.53ID:A25jV+I2p
>>556
それはMultitonという名前があるので別物
2019/10/10(木) 19:25:30.70ID:L06ZuPDBM
代表格はロガーw
2019/10/10(木) 20:18:53.50ID:Dw9sQNQ5M
シングルトンとかGoFの中で一番残念なパターンだろjk
2019/10/10(木) 20:43:06.65ID:sP1rZpbe0
シングルトンはマルチスレッドでつかって副作用ないの?
それこそロガーとかなんか嫌な上書き起こしそうな
2019/10/10(木) 20:44:52.27ID:MOJ1Uzup0
お前ら完全にJa馬鹿と同レベルまで落ちたな。
C++やってるぼくすごい、だからだろうが。

シングルトンの使い道なんて無い。
あれはグローバルが文法的に存在しないJavaでグローバルを使う為にでっち上げたもので、
その嘘がばれないようにデザインパターン(キリッしたものだ。
だからデザインパターンは嘘八百で、全部ゴミだ。
そしてそれをありがたがっている馬鹿共も全員無能だ。

実際、お前ら自身も、何の有り難みがあるか分からないだろ。
それで正しい。
嘘に騙されないように気を付けろ。
そしてその嘘つきは大体、コードを書かない癖にゴタクを述べてるライタだ。
だから(プログラマじゃない奴が書いた)本で学ぶのは止めた方がいい。

実際、ロガーなんて、グローバルスコープに存在しないと使いにくいし、
どうせ使うんだからstaticに生成して全く問題ないだろ。
デザインパターンの本来の趣旨「頻出パターンを学ぶことにより上達を促す」は正しいのだが、
いわゆるGoFとかのデザインパターンが糞過ぎるんだ。
ロガー等を作る場合なら、マルチスレッド対応のキューイング部分の
「悲観的ロック」「楽観的ロック」等をデザインパターン化するべきなのだが、そうなってない。

ただ、話を聞いている限り、お前らはまだクラス分けが必要なレベルに達していない。
上達したいのなら、今やってる珍妙カラクリオナニーをこねくり回すのは止めて、
無駄のないコードを書くことにフォーカスした方がいいと思うが。
それで1,000行越えるようになってから、改めてクラス分け等を学べばいい。
今のお前らが何故そこまでクラスにこだわるのか分からないが、
今の時点で珍妙カラクリオナニーに勤しんでいるようなら、Ja馬鹿と同レベルにしかなれないぞ。
今実際そうだし。

なお反論するなら、まともなOSS等でシングルトンが有効に使われているソースを提示してくれ。
10.000行程度なら読むから。
2019/10/10(木) 20:51:33.59ID:AtKCqacH0
ロガーは機能単位やモジュール単位で作るだろ
見出しつけたりon/offを個別にコントロールするんだから
シングルトンのロガーなんて不便でしかない
そういうこといってるやつは経験不足
2019/10/10(木) 21:04:54.58ID:5ZWwl01kM
>>563
ん?
なんかおかしいと思うなら指摘してみ
2019/10/10(木) 21:06:12.07ID:5ZWwl01kM
>>567
それこそバカの典型だろw
まともなロガーの実装見てこいよ
2019/10/10(木) 21:09:00.51ID:Rs95j10uM
>>567
テンプレートなんだから必要な単位で作るだけでは
2019/10/10(木) 21:09:26.27ID:Dw9sQNQ5M
と、GoF本がどの言語で書かれているか知らず、java仕様も知らないvoid君が呟いてます
2019/10/10(木) 21:19:24.09ID:AtKCqacH0
>>569
じゃあ有名どころのspdlogのサンプルでも見てみな
ロガーをby nameで管理するregistryが内部的にシングルトンになってるがロガーは違う
ロガーはいくらでもインスタンスが作れる
https://github.com/gabime/spdlog/blob/v1.x/example/example.cpp

次お前シングルトン(GetInstance()してるやつ)のロガー持って来いよ
2019/10/10(木) 21:24:19.62ID:A25jV+I2p
>>565
もちろんスレッドセーフにするよ
インスタンスを返す関数の中にstd::lock_guard入れるだけ

>>567
マジで言ってるのかジョークで煽ってるのか分からん
2019/10/10(木) 21:31:31.52ID:aZnaY5Is0
まあ普通のことを言ってしまうと
シングルトンて現在では有名なアンチパターンだよ。
設計が完全に間違ってる場合に生じるものと思ってよい。
2019/10/10(木) 21:33:28.29ID:A25jV+I2p
>>572
spdlogのregistry.hのinstanceを見るとstaticの変数を返してるから、これシングルトンパターンの典型例だぞ、、、
2019/10/10(木) 21:44:28.65ID:AtKCqacH0
>>575
どこのことを言ってるかしらんがたぶんそれデフォルトのロガー
最近のバージョンからそれがはいった
そこまで見たならspdlogに関してロガーはいくらでも作れるのはわかっただろ?
ロガーのユースケース考えたらそんなの当たり前なんだよ
2019/10/10(木) 21:53:19.67ID:A25jV+I2p
俺もシングルトン信者ではないからシングルトンが必要になったときには設計を見直すが、シングルトンがアンチパターンであると提唱するヤツの言い分はあまり好きではない

シングルトンをアンチと言っているヤツの言い分一つに、ユニットテストがマルチで走らないこととか抜かしている
物理デバイス、例えばカメラと1:1でシングルトン用意するのはむしろ安全だ
578デフォルトの名無しさん (ワッチョイ bfad-NJTS)
垢版 |
2019/10/10(木) 21:55:58.39ID:mwVmNgNo0
シングルトンは「全部ヘッダーに書く厨」にとって天敵だし
2019/10/10(木) 22:16:24.45ID:szm7qXWta
わきからちょいちょい眺めてるだけだが
長文は口はわるいが言ってることは的を射ている
2019/10/10(木) 22:17:28.54ID:AtKCqacH0
>>577
> 物理デバイス、例えばカメラと1:1でシングルトン用意するのはむしろ安全だ

まったく安全でない
複数から参照取られて同時にアクセスされたら破綻するだろ
デバイスはopen/closeのイディオムが古くから確立されてんだからそれに従えばいいだけ
やっぱりいろいろあれじゃねお前?
2019/10/10(木) 22:44:44.67ID:d4jIcC4i0
>>572
> ロガーをby nameで管理するregistryが内部的にシングルトンになってる
なんのためにそうなってるかを考えたらわかると思うんだが…
582デフォルトの名無しさん (ワッチョイ bfad-NJTS)
垢版 |
2019/10/10(木) 22:53:56.75ID:mwVmNgNo0
スレッド局所記憶(英: thread local storage, TLS)があればシングルトンでもダイジョブ
2019/10/10(木) 22:55:00.12ID:Rs95j10uM
>>580
シングルトンにするクラスがスレッドセーフなら問題ないのでは
2019/10/10(木) 22:56:22.42ID:MOJ1Uzup0
>>567
(俺に向けて言っているのかは微妙だが、)
こちらも registry.h を確認した。そして俺自身は spdlog の作りで問題ないと思う。
俺が「グローバル」と言ったのはこれで言うと spdlog になる。
ただ、俺なら syslog 等のお約束は spdlog 内に
void spdlog::sys(const std::string &str) 等にして転がしてしまって、直接それを叩き、
個別のloggerのポインタを掴んでガコガコ、ってのは最小限にするが。(というか基本やらない)
とはいえ、個別にログをガシガシ取りたいなら直接叩く今のspdlog方式の方が使いやすいのも事実だ。

ただね、個別にログ取ってもいちいち見るの大変だし、個々の順番も分からなくなるから、
纏めて errlog 等に吐き出して grep する方が実用的だと俺は思ってそうしているが。
個別にログ取るメリットって何よ?
2019/10/10(木) 23:19:05.01ID:PwTe/5Hg0
>>580
シングルトンそのものが安全機構を提供する訳ではないからその意見は至極真っ当だな
当然open/closeも実装するが、言いたいことはユニットテストがマルチスレッドで走らないからアンチパターンに含めるというのは賛同できないという事だ

いちいち全部書かないと分からないようだから書くけど、デバイス制御でデバイスをいきなり作るのではなくモックをソフトウェアで作って試験する
このモックをシングルトンで作って置くと、マルチスレッドでユニットテストが通らない
通らないのが正しいんだ
そういう意味の安全
2019/10/10(木) 23:38:16.51ID:MOJ1Uzup0
>>585
それはお前がおかしい。(2重に)

まず>>577の書き方がおかしい。
普通に読んだら、「mutex使わずにシングルトン?」と読める。>>580がまとも。
585の意味なら、そこで「モック」と明示的に書かなければ通じない。

次に585、それがそもそもおかしい。
ハードのモックをソフトで作って、排他制御が出来ていないときに正しく落とすのなら、
MutexのTryOpen等を使って実装し、(例えば以下)
https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.mutex.tryopenexisting?view=netframework-4.8
falseが返ってきたら全部アウト(落とす)というように実装するのが普通で、
そこでシングルトンとかいう構造で無理矢理落とそうというのがそもそも間違っている。
というかそのお前が作っているモック、全く信用ならないと思うが。
それだと「落ちるときもある」であって、「上位での排他制御を忘れた場合に100%落ちる」ではないだろ。
それでは使い物にならないと思うが。
2019/10/10(木) 23:55:12.29ID:PwTe/5Hg0
>>586
なんでお前は勝手に想像して批判するんだよ
上に俺の書き込みでstd::lock_guardと書いてるんだから、当然そこにはmutex入ってるだろ

mutexで例外飛ばして落とすなんて普通にやるよ
そういう話をしてんじゃねーよ

モックでうまくいった試験が実デバイスに入れ替えた途端にマルチスレッドで走って、setupでありえない動作してmutexで落ちたって、片方の試験はされてないだろ
ここにシングルトン導入するだけでヒューマンエラーが減るんだよ
2019/10/11(金) 00:15:49.73ID:LABzZ1eO0
>>587
だからそうじゃないんだよ。
お前が言ってるmutexは、ちゃんと止まるmutexだろ。
つまり、取れなかったり取れたりするmutexだ。(それ自体を排他制御に使っているmutex)

俺が言ってるのは、常に取れるmutexであって、取れないとアウトだ、ということ。
それは上位で排他制御しているから。

馬鹿なお前の為にもっとかみ砕くと、二重のmutexの構造にするんだよ。
外側はユーザー(つまりデバイスを使う側)がmutexを取る。
これがお前が言っているmutexだ。これをmutexAとしよう。
そしてモック内にmutexBをもう一つおく。これがチェック用のmutexで、
mutexBはmutexAで排他制御済みなのだから常に取れるんだよ。
だからtryOpenでfalseならアウトにする。それだけだよ。

モックで上手く行った試験ならデバイスでも100%走るべきであって、
それが出来てないのは、お前のモックが「落ちるときもある」でしかないからだよ。
お前の言い分は、お前のモックがポンコツだと証明しているだけだぞ。
お前には分からないのだろうけど。

まあこれ以上は平行線だろうから、俺の言い分をお前の上司に見てもらえ。
そして怒られろ。


デザインパターン廚の問題はここで、
本来はデザインパターンで対応するものではないのものを無理にデザインパターンで対応しようとしてしまう。
引き出しを増やす為のデザインパターンなのだが、デザインパターンを使うことが目的になってしまっている。
今のお前らもそうだろ。クラス分割することが目的になっている。
今のお前らの実力なら、無駄のないコードを書くことにフォーカスした方がいい。
mutexで対応すべき案件をシングルトンで、とか、狂ってるぞマジで。
2019/10/11(金) 00:19:03.25ID:IPv0p6t90
シングルトンってのはインスタンスの数を制限するとともに、みなさんご自由に参照とって使ってくださいよってパターン
お前のは後者の観点が抜けている
2019/10/11(金) 00:19:37.19ID:IPv0p6t90
>>587
2019/10/11(金) 00:29:38.02ID:S7NqF4Ra0
>>588
お前はだから勝手に想像して批判するのをやめろ
二重のmutexだって使うし、当たり前すぎるから一々書かない
お前は自分だけが知ってるとか勘違いしてるから諭すように余計なことを言い始めるが、滑稽なだけだぞ

誰がモックのみでうまく行く試験書くんだよ?
モックの段階で気づく事ができるから、シングルトンの有効な使い方の一つだと言っているだけだ

お前は誰かがシングルトンはアンチパターンと言っているから、シングルトンの活用の仕方を放棄してるだけだろ
ハッキリ言って思考停止してるよ
2019/10/11(金) 00:37:41.40ID:S7NqF4Ra0
>>589
後者の話は真っ先に>>561で書いた
ロガーが代表格と書いて置いた

今話しているのは、シングルトンがアンチパターンだという理由の一つに、シングルトンを含めるとユニットテストがマルチスレッドで動かない事が挙げられている点に、俺は賛同していない
その具体例を挙げているだけ

シングルトンである必要はないが、シングルトンを活用できる事例だよ
2019/10/11(金) 00:51:34.26ID:x236K5Xl0
Interface& singleton(); で済むところ、わざわざ実装クラスを公開したうえで「これはシングルトンです」
などと制限を加えるのはマヌケに見える。そもそも実装クラスを公開しなければ勝手にインスタンスが作られることもないのに。
2019/10/11(金) 00:53:32.37ID:x236K5Xl0
「勝手に想像して批判」「自分だけが知ってるとか勘違い」などと指摘した人はたくさんいたけど、
そこは変わらない彼の性格なようだから、あきらめたほうがいい。
いろいろあってこの重複スレに閉じこもってくれているだけありがたい。
2019/10/11(金) 01:05:57.82ID:LABzZ1eO0
>>591
>>592
お前がそう思うのは自由だが、お前はマジで狂ってるぞ。

それは間違ったシングルトンの使い方であって、2重mutexで組むのが正しいし、それだけだ。
シングルトンのモックは「排他制御を忘れてデバイス上で競合し、
たまたまシングルトンの排他制御が出来ていない部分に命中」した場合に落ちるだけだ。
2重mutexだと「排他制御を忘れてデバイス上に突入」したら全部落とせる。当然モックとしての質は高い。
だからこの部分を2重mutexではなくシングルトンで組むというのは明確な間違いだ。
というか何故それをシングルトン、というのが疑問だが。
普通に考えてそうはならないだろ。
既に言ったが、シングルトンを使うことが目的になってるとしか思えない。

まあいずれにしても、上司に怒られとけ。それがお前にとって一番いいと思う。
お前はそもそもモックが何の為にあるかとか、その辺から分かってない。

なお俺はシングルトンの使い道はない、と言っているだけだ。
別に誰かがどうこう、ではない。実際に使えないから使えない、と言っているだけ。
2019/10/11(金) 01:48:03.62ID:S7NqF4Ra0
>>595
いや、だからなんで2重のmutexを入れない前提になってんだよ

物理デバイスに対してユニットテストを行う場合、そもそも平行して試験できないから、そこにシングルトンを入れて平行に試験できない事がデメリットではないと言っているんだが、何故伝わらん
2019/10/11(金) 01:53:41.68ID:S7NqF4Ra0
>>594
身をもって理解したw
2019/10/11(金) 02:03:23.96ID:LABzZ1eO0
>>596
伝わらないのはお前が色々嘘を言っているからだ。
お前は自分の書き込みを読み返して、矛盾等がないか確認してみろ。

まあとにかく、お前はここの書き込みを上司に見てもらって、怒られろ。
上司がまともならそれで問題なくなるはず。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況