C++相談室 part145

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:13:24.60ID:/ygW08Jq
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
2019/09/17(火) 23:02:25.13ID:iJB0hxCG
>>88
安易にそれ勧めない
まず再帰ロック不要な設計にするのが基本
2019/09/17(火) 23:05:20.26ID:cgXPZZnO
問題集回しコピペワロタw
96デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:06:00.71ID:TcK6H4+J
マイクロソフトがgithubにSTLの実装を公開してる。
どんどんオープンにしていくのな・・・

https://github.com/microsoft/STL
2019/09/17(火) 23:08:28.20ID:cgXPZZnO
ガーガーバカw
2019/09/17(火) 23:15:14.52ID:aYbHZN9j
>>92
それはwindowsのCRITICAL_SECTIONが再帰的ロック取得を認めているというだけで、
普遍的に通用する話じゃない。例えばstd::mutexを使った場合とかな。
>>87みたいなケースでは高階インターフェースのB()とinner_B()を分離するとかが常套手段だな。
2019/09/17(火) 23:17:56.03ID:f5N3Fp86
サウンド鳴るようになったのか!
2019/09/17(火) 23:22:32.62ID:/ZgM52F4
>>98
CCriticalSection
って書いてあるからCRITICAL_SECTIONの話では?
2019/09/17(火) 23:23:20.44ID:f5N3Fp86
はい今日も完成品なしw
2019/09/17(火) 23:35:00.33ID:aYbHZN9j
>>100
だからwindowsのCRITICAL_SECTIONなら通用する話だけど一般に通用する話じゃないってことだよ。
そういう環境だと

>逆に同じスレッドでAの中からBを呼び出したとき、Bでロックしてしまったら
>誰がロックを解除するんですか?

誰が解除するか心配する以前にBでロックを試みた時点で例外が飛んだりする。
2019/09/17(火) 23:35:10.09ID:5UuHJcwd
recursive lock
2019/09/17(火) 23:40:43.31ID:ZBXs33c7
>>87
CCriticalSection cs;

void B_Core() {
 /*元々のB()でやろうとしていた処理・lockは抜き*/
}

void A() {
 CSingleLock lock( &cs, TRUE ) ;
 ...
 B_Core(); // A()の中からはB()の代わりにこれを呼ぶ
 ...
}

void B() {
 CSingleLock lock( &cs, TRUE );
B_Core();
}

もちろんB_Core()は外部から呼べないようにするべきである。
2019/09/17(火) 23:46:17.48ID:/ZgM52F4
>>102
それはWindowsのCRITICAL_SECTIONでは再ロック可能にしてある理由の説明なんですが
2019/09/17(火) 23:47:40.49ID:ZBXs33c7
ジャヴァのsynchronizeとか再帰ロックオールOK
なんでかわ知らん
ていうかwait()をsynchronizeでかこわなけっればならないという
謎仕様
意味わからん…
2019/09/18(水) 00:06:04.33ID:ccSwOulV
まあこんなクロージャとの組み合わせのときにちょっと意味があるのかもしれんが…
// UIスレッド
Handler handler = new Handler();
...
// バックグラウンドスレッド
synchronize (this) {
 final Foo thisObj = this;
handler.post(new Runnable() {
   @Override
   void run() { /*...*/ thisObj.notify(); /*...*/ } // クロージャ内から仕掛け元のthis.wait()を起こす
 });
wait();
}

つかnotify()とwait()の1対1対応とかを言語が暗黙のうちに仮定しているからか、
今わかったわ糞が…!!
2019/09/18(水) 00:06:06.17ID:WgADinsd
謎じゃない
condをどうやって実装するか調べてみ
2019/09/18(水) 11:06:38.20ID:FwmyHFG9
BASIC未満のゴミw
2019/09/18(水) 12:20:05.69ID:gxRTPgch
主語が足りてないぞチミ。
2019/09/18(水) 12:54:00.14ID:1Vhu13ZT
algorithmだけで5000行あんのか
https://github.com/microsoft/STL/blob/master/stl/inc/algorithm
有り難くて目が潰れる
112デフォルトの名無しさん
垢版 |
2019/09/18(水) 15:09:43.97ID:cX0n8f6q
ファイルにテキストを書き込みする際に、
ファイルにどれだけ書き込んだかを取得してプログレスバー的な処理をしたいのですが、
どのようにして書き込んだ量を取得すればいいのでしょうか?
2019/09/18(水) 15:14:37.40ID:d3y9L0GY
書き込んだバイト数の合計を数えるしかない。fprintfなら戻り値。文字列ならstrlen。
2019/09/18(水) 15:19:25.37ID:d3y9L0GY
合計バイト数がわからない場合は最初に全部数えるか、バイト数の代わりに行数などを使う手もある。
2019/09/18(水) 23:17:12.89ID:UKnFRk4i
頑張ってプログレスバーを実装したはいいがいざ実行すると
一瞬で表示が終り実装した意味あったのか・・と嘆く >>112 の未来の姿がみえる・・
2019/09/19(木) 00:44:38.80ID:zP6ZrAr3
書き込んだ量を取得することより、書き込み総量を計算するほうが難しい
ですよね。特にプログレスバーが必要になるほどトータル時間の掛かる処理の場合
に正確な総量を計算するとなれば莫大な時間が掛かってしまう可能性が高くて。
だから推定量を何らかの方法で求めるしかない事が多いでしょう。
2019/09/19(木) 01:08:08.89ID:pXxp02XD
いや足していくだけだけど
2019/09/19(木) 01:11:02.88ID:b8NtymRi
つーかテキストだろ?ギガ単位のサイズじゃないんなら
一回メモリにバコバコ貯めといて一気にブワァーッと書くほうが早いよいろいろと
2019/09/19(木) 01:23:42.33ID:wlX+Ifsh
だな
今のコンピュータなら数十MBくらいガバっと読み込んでいいのに、いまだに少しずつみたいな解説してる本やウェブサイト大杉
2019/09/19(木) 06:29:12.29ID:TNTldw8V
プログレスバーとかユーザーの気を静めるためのインテリアみたいなもんなので
過度に精度に凝っても仕方が無い
例えばウィンドーズのファイルシステムで1フォルダに10万個ぐらいファイルがあって
それをリモートのウィンドーズのファイルシステムにコピーするとかな場合は
ファイルのトータル容量とか気にせずに
 進捗率(%) = 100 * コピーしたファイル数/10万個ぐらい
でも役に立つ
2019/09/19(木) 06:32:56.13ID:1k0/HGmS
いやプログレスバーは「きちんと」「しっかり」作らないと
ユーザーのイライラゲージを却って煽ることになるぞ
2019/09/19(木) 06:34:12.46ID:TNTldw8V
長らくぴくりとも動かなかったプログレスバーが一気に進んだとき
ユーザーに爽快感を与えることができうる
2019/09/19(木) 07:48:55.38ID:FVuvug5W
>>122
自分でそれを見たらイライラするタイプだろう
2019/09/19(木) 08:27:53.76ID:UG8ew1B1
99%で止まるやつはイライラするな。
進捗率よりも、書き込んだバイト数とか表示してくれると動いてるのがわかるから好きだな。
2019/09/19(木) 08:40:01.59ID:X+5OT7FX
>>121
windows update
2019/09/19(木) 23:28:31.87ID:TdUlR93V
progress_displayたん…どうして死んじゃったの…
2019/09/20(金) 08:56:12.04ID:Qo6+tgpY
全支店のファイルを集計するツール作った時
九州支店とか遠方の支店に入ると突然90%とかから進まなくなって
イライラおじさんに「なら最初から期待させるな」みたいなお説教された思い出

そこの回線だけやたら細かったというオチなんですけどね
今ならどうやって作るかなあ?
前処理で軽くテスト集計して予想回線速度をチェックしたうえで
拠点ごとに速度の重みづけをして見積もるか?

きちんとやるなら面倒だけどやるしかないよな
それとも運用方法の変更なりで逃げるか
プログレスバーの工数見積り怖い・・・
2019/09/20(金) 09:04:34.21ID:Qo6+tgpY
処理中のファイル名をリアルタイム表示して
進捗率の方はあくまで参考値という体にする手もあるか
あとは費用対効果を説明してこれで我慢してもらう交渉でって感じで
キャンセルボタンも付けるべきだよな上司はイランて言ってたけど
2019/09/20(金) 09:12:44.78ID:hmm5+Tdj
プログレスバーの下に店名と店長の名前表示すりゃいいじゃん
2019/09/20(金) 09:29:35.36ID:JFYTR1x6
その支店に接続するのにかかった時間を計測しておいて
それをベースに表示してみたら
2019/09/20(金) 10:44:26.44ID:BhKigXRx
接続先と毎秒の処理したバイト数でも表示すればいいんでね。
2019/09/20(金) 11:11:25.39ID:Qo6+tgpY
>>129
店長の名前は関係ないだろ
うっかり考え込んでしまったわ
2019/09/20(金) 11:36:45.41ID:hmm5+Tdj
クレーム先だよ
なんなら電話番号も出せばいい
2019/09/20(金) 12:02:27.62ID:l/kiVjID
ロード中にテトリスで遊べるようにしておけばいいよ
2019/09/20(金) 14:12:27.16ID:RTklMOF0
>>134
それたしかナムコが特許もってたような
2019/09/20(金) 14:57:59.95ID:KQX84Fxf
とっくに消滅してる
2019/09/20(金) 18:37:33.58ID:xrPkbjYn
あるクラスのインスタンスを生成するときに、必ずあるメンバを初期化してほしいとします。
このとき、コンストラクタで初期化することにしたのですが、初期化は必ずやってほしいためデフォルトコンストラクタは禁止したいです。

デフォルトコンストラクタを禁止するのはどうやりますか。
2019/09/20(金) 18:43:14.50ID:MFrl2Bhu
deleteすりゃいいじゃん。これ以上は言わぬ
2019/09/20(金) 19:02:34.17ID:sJdfK6qv
>>137
モダンなやり方は = delete;だろう。

古臭いやり方はprivateにして定義を書かないようにすれば、アクセスできないようになる。
2019/09/20(金) 19:30:48.34ID:HuG+DEnO
5年ぐらい前に失効してたのか・・時の流れるのは早いのう
https://automaton-media.com/articles/newsjp/loading-screen-mini-games-patent-will-be-expired-at-united-states/
2019/09/20(金) 19:32:15.62ID:mfXfj+Qu
どうでもいいがC++界隈はハチミツギョーザとか蟻人間とか
なかなかユニークなコテが多い印象
2019/09/20(金) 19:58:49.42ID:xrPkbjYn
>>138-139
ありがとうございます。
やりたいことそのものです。
2019/09/20(金) 21:54:40.66ID:Q9EEZSVd
キャンセルボタンなしの進捗ダイアログ表示して安心してたらESCキーで閉じられて不正動作
2019/09/21(土) 12:33:44.52ID:HPdvwX1r
>>141
「蟻人間」のコテは最近それに改名されたものですよ…
145デフォルトの名無しさん
垢版 |
2019/09/21(土) 17:28:53.63ID:hvfc00gO
Visual Studio 2019 C++ community editionを使用して
PythonをC++で使いたいのですが、

Pythonライブラリーの Python.h ファイルに
#pragma comment(lib,"Python37.lib")
といった記述があり、それがリンクエラーの原因となっております。

プロジェクトプロパティ>VC++ディレクトリ>ライブラリディレクトリには
「$(Path)libs」と記述して、パスは通したのですが改善されません。

これのリンクを通したいのですが、どのようにして対処すればよいのでしょうか?
お願いします。
2019/09/21(土) 17:46:36.63ID:B7P1QhOW
$(Path)という定義済みマクロが無いか、あるいは環境変数PATHの内容が
そのまま(つまり複数のパスを「;」を挟んで連接した文字列に)展開されているのかもしれんから、
展開結果を確認するか、それができないのであれば
絶対間違いのない絶対パス指定でうまくリンクできることを確かめてから改めて来なちゃい
147デフォルトの名無しさん
垢版 |
2019/09/21(土) 18:20:26.50ID:hvfc00gO
>>146 さん。ありがとうございます。

絶対パス指定ならリンクは通りました。
ただ、相対パス自体はあるのですが展開結果が連結しているようです。

重ねての質問になるのですが、
#pragma 等で相対パスを使用する際に、
相対パスが連結している場合はどう対処すればいいのでしょうか?
2019/09/21(土) 18:54:54.04ID:B7P1QhOW
ライブラリをソリューション相対指定可能なフォルダに置いて
Visual Studioの定義済みマクロ($(SolutionDir)なり$(ProjectDir)なり)を正しく使えば良いだけの話なのでは…

あるいは、ライブラリのインストール先が決まっておりライブラリの位置を勝手に動かせないということであれば、
絶対パス指定で何の問題も無いはず…

ソースコードなりプロジェクトファイルなりに絶対パス指定が書かれることによるプロジェクトの可搬性が問題になるなら
適当な環境変数を設けてそれにただ1個のパスだけ定義して$(環境変数名)で展開させるか、
絶対パス部分をVisual Studioの機能でユーザーマクロ定義して最小化することができうる
※ [表示]→[その他のウィンドウ]→[プロパティーマネージャ]、とすればプロパティーマネージャータブが現れるので
  そこで継承元の設定を変更でき、その中でマクロのユーザー定義が可能

いじょ 耕運を祈る、
2019/09/22(日) 06:52:19.04ID:wJwJ26l5
std::variantってテンプレートによる静的ポリモーフィズムを実現しつつ一つのコンテナで管理したいという要求から生まれたんでしょうか
であるとしたら今後継承による動的ポリモーフィズムは下火になっていくのでしょうか
2019/09/22(日) 10:30:22.84ID:dVD4vVZj
variantは共用体の代わり
2019/09/22(日) 22:04:08.49ID:P121omqV
> std::variantってテンプレートによる静的ポリモーフィズムを実現
継承もstd::variantも実際に格納されている型が実行時まで分からないのだから、
静的(コンパイル時)ポリモーフィズムにはならないのでは?
2019/09/23(月) 00:26:21.21ID:7kwjfJuy
gcc, clang, VC++, その他
仕事で使われるのはどれ?
2019/09/23(月) 00:50:57.87ID:QJYuDw18
>>152
gcc, clang, VC++
2019/09/23(月) 01:06:32.53ID:4WIp5ctr
intelも使われるし、C++ Builderも使われてる
2019/09/23(月) 01:21:58.30ID:7kwjfJuy
仕事でC++14より上使っている?
2019/09/23(月) 03:12:30.92ID:aMvJGSmY
iccって高いだけで性能もgccとほぼ変わらないなら値段に見合う利点あるのか?
2019/09/23(月) 09:16:12.73ID:QJYuDw18
メニーコアなCPUとSIMDを使ったときのプロファイラが優秀
おそらく
2019/09/23(月) 11:42:56.67ID:rVs/BJT1
普通に17使うだろ
filesystemやvariant,optional使わんの?
2019/09/23(月) 11:57:29.62ID:f1jovMGd
だよな
2019/09/23(月) 12:02:46.51ID:P5eYiou7
お仕事だとそうぽんぽんバージョンあげられないし
使っていい標準ライブラリのしばりもあったりするんですよ
特にプラットフォーム抽象する系はあんまり使わない
そんなのにべったり頼るぐらいならc++でなくてよくね?ってなる
2019/09/23(月) 12:08:09.26ID:rVs/BJT1
最近はmsvcがバイナリ互換保ち続けているから安心してあげられる。
gccやclangはもともと対応早いから安心だったし。
2019/09/23(月) 12:19:16.90ID:f1jovMGd
>>160
filesystem使って見た?
まだ荒削りで所々変なところがあるけど
方向性としてはいい線ついてると思うぜ
2019/09/23(月) 12:24:31.61ID:EI75oq0E
あ、こいつバギーなライブラリ入れて現場荒らすタイプだわw
2019/09/23(月) 12:31:48.66ID:rVs/BJT1
勝手にライブラリ追加できる時点で糞みたいな職場じゃね
2019/09/23(月) 12:47:46.83ID:f1jovMGd
難癖つけるのは構わんが
脇が甘いぞおまえら
2019/09/23(月) 13:15:30.01ID:WS0TgAIm
まあケースバイケースだろ
ポンポンバージョン上げられないって言うだけで古い環境使い続ける職場もどうかと思うし
2019/09/23(月) 13:21:49.79ID:P5eYiou7
>>162
ファイルシステムまわりはこてこてにネイティブ依存の内製のものがあるので出番はないでしょうね
パフォーマンス第一の仕事なもので
あと標準ライブラリはデバッガやプロファイラのことがスコープ外なのでそのあたり自分達で整備しないと採用できないってのもある
2019/09/23(月) 13:33:54.17ID:f1jovMGd
なるほどね
パフォーマンス第一か
どっちかつーと標準なんぞ糞くらえつーか
標準の意味が違ったりするわけか
2019/09/23(月) 14:04:13.62ID:JqkYM16h
同じじゃん標準ライブラリは一般性重視故に特定の問題領域において必ずしも最高の性能は発揮しない(最高の性能となる保証がない)ことは確定的に明らかよって80-20の法則の80部分からパフォチューしていく
2019/09/23(月) 14:07:39.82ID:QJYuDw18
頭悪い書き込みしか無くて草
2019/09/23(月) 14:31:50.86ID:JqkYM16h
天 才 現 る
2019/09/23(月) 22:59:04.40ID:EI75oq0E
てかc++でやることじゃねーだろどう考えても。
糞の役にも立たんわ。
2019/09/24(火) 00:22:06.58ID:iXMkuGmM
C++でやる事って何よ?
2019/09/24(火) 01:05:00.80ID:blreVUO1
templateで遊ぶくらいしかやることないね。
2019/09/24(火) 06:38:35.03ID:3E9gAKbz
仕事がないって話はマ板でやんな
2019/09/24(火) 18:32:13.78ID:9F3bEWFD
汎用性・可搬性を重視するかパフォーマンスを重視するかのスタンスの違いだけでしょ
2019/09/24(火) 19:39:45.71ID:bRBDEgqh
>>173
filesystemみたいなライブラリの実装。
178デフォルトの名無しさん
垢版 |
2019/09/24(火) 20:52:11.47ID:ZtSwhx8Z
visual studio 2019 16.3でついにconceptが使えるように(赤線でるけど。。。
2019/09/25(水) 00:19:35.27ID:T/Q1Hzp4
conceptはいい
人類は真の抽象化を手にする
2019/09/25(水) 00:39:03.31ID:0gY/IvgH
C++98の俺には1ミリも関係ない話だな。
2019/09/25(水) 00:43:58.99ID:ROl8Z6BD
じゃあ出て行け
2019/09/25(水) 01:15:27.21ID:zpsuJSx5
98とかVB6と同レベルの化石
2019/09/25(水) 16:32:45.50ID:5aP+8CuP
>>181
お前が出て行け
2019/09/25(水) 21:10:30.42ID:065+eRsw
じゃあ俺が
2019/09/25(水) 21:20:37.77ID:SmUxqnJ3
いやおれが
2019/09/28(土) 01:40:31.76ID:cIYNjYIc
重複スレの方が謎の盛り上がり
2019/09/28(土) 02:11:00.78ID:intFUv+k
void君はあのスレから出られないからな
188デフォルトの名無しさん
垢版 |
2019/09/28(土) 14:48:43.27ID:nKwEArCO
このスレはwinapiを扱ってますか?
sendmessageとか。
2019/09/28(土) 16:09:42.06ID:EwMBvois
>>188
Win32API質問箱 Build125 :
http://mevius.5ch.net/test/read.cgi/tech/1551247748/l50
2019/09/28(土) 16:12:26.72ID:QJtrgyVU
>>188
win32api ならやってる人は少なからず居ると思います
191デフォルトの名無しさん
垢版 |
2019/09/28(土) 16:37:07.73ID:nKwEArCO
>>190
サンクス!
2019/09/29(日) 07:24:31.34ID:wVCOjSn/
文法とか開発思想の初歩的な質問なんだが、例えば最大流問題を解くプログラムと最小費用流問題を解くプログラムで「Edge」という構造体や「dfs」という関数の意味を変えたいときに使うのが名前空間だという理解でOK?
(関数の意味を変えたいだけなら名前空間じゃなくて別のクラスを用意すれば良いだけかな?)


あと、名前空間の中でグローバル変数を使うのは通常のグローバル変数と同じで慎重にやった方が良い(と言われてる)?
例えば最小費用流問題を解くときに経路の情報を記録したりするんだが、この経路を mincostflowという名前空間におけるグローバル変数にするとか
2019/09/29(日) 09:01:23.18ID:thkZayt3
名前空間は名前をまとめるだけであって隠蔽したり上書きしたりする機能はない
素直にクラス使え
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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