- 1 名前:デフォルトの名無しさん [2017/11/04(土) 16:33:35.07 ID:NYxCuvMY.net]
- エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう 半角空白やタブでのインデントはスレに貼ると無くなります コードを貼れる所 codepad.org/ https://ideone.com/ 前スレ 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1500329247/
- 357 名前:片山博文MZ mailto:sage [2018/03/26(月) 21:52:30.42 ID:42MV7MT1.net]
- charのビット数、CHAR_BITが8ではない環境はほとんど
- 358 名前:ネい。 []
- [ここ壊れてます]
- 359 名前:片山博文MZ mailto:sage [2018/03/26(月) 22:00:14.93 ID:42MV7MT1.net]
- 4ビットCPUで動作するトースターのコンピューターの話でもするつもりかね。
- 360 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 22:58:41.82 ID:3IjTFjn0.net]
- ほとんど無いから何?
「決まってない」の反論になってないよ 現行品でcharが16bitの環境があるんだけどね
- 361 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:00:24.31 ID:3IjTFjn0.net]
- charが符号付きとも決まってない
ちょうど今符号無しの環境を使ってるよ
- 362 名前:片山博文MZ mailto:sage [2018/03/26(月) 23:02:53.12 ID:8aZ5PUAj.net]
- インテル入ってない
- 363 名前:デフォルトの名無しさん [2018/03/26(月) 23:03:06.95 .net]
- 俺のcharは100bitあるぜ!!
- 364 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:04:42.66 ID:3IjTFjn0.net]
- とりあえず>>1を読んどけ
- 365 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:55:34.36 ID:2w8Ha0HC.net]
- char と signed char を混同するクソコテ
- 366 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:28:23.66 ID:bCiMyjcv.net]
- 今後char関連の質問をするときは、charのビット数や符号などの環境を明示しましょうということで。
初心者お断り感あるけど、重箱の隅を全力でほじくり返す人がいるからしょうがないね。
- 367 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:33:34.51 ID:GW1/xmrB.net]
- unsigned char がデフォなんてMS-C 3.x or 4.xの /J オプション付き
以外に遭遇した事無いけどな
- 368 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 02:55:06.24 ID:oddUVIdN.net]
- >>359
>>341の質問に対してcharの符号有無が環境によって異なるというのは本質的な回答であり、ビット数の話は不適切だったというだけで、重箱の隅がどうこうという話では無いだろう。 そもそも初心者歓迎のスレで初心者を除外する要件を設けるのは本末転倒では?
- 369 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:09:18.07 ID:vavxlF2f.net]
- ???
環境を明示しろって言うのは>>1にも書いてあるんだが...
- 370 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:42:58.98 ID:7BdcIkqa.net]
- >>361
初心者だろうと質問に付随する前提知識は必要 変数知らんデータ型知らん制御文も分からないじゃ説明しようがない事なんていくらでもある まずそこら辺の知識を理解してもらわん事には説明できないですってのは初心者を除外とは言わんだろう
- 371 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:52:49.58 ID:ofLFYE4b.net]
- 回答者もわかってないからな
>>352とか
- 372 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 08:13:51.03 ID:ofLFYE4b.net]
- 4ビットCPUだとcharは4ビットと思ってんのか?
- 373 名前:デフォルトの名無しさん [2018/03/27(火) 08:39:25.07 ID:tnecWY6M.net]
- >>341 >>346
不都合と言う程の不都合か分からないけど、 単なる char が signed char のコンパイラで、例えば str[i] == -1 の時、 printf("%02X ", (unsigned char)str[i]); なら表示は "FF " printf("%02X ", str[i]); だと表示は "FFFFFFFF " (intが32bitの環境) てな具合に表示結果が指定桁数とずれて見苦しい、という現象が起きる。 ただし void DumpCode(const char* str) でASCII文字列しか扱わないなら、 意図せずASCII以外(漢字など)を含んだ文字列を引数に与えたときに 「見苦しい表示結果」のおかげで関数の使い方の間違いに気付きやすい。 よって (unsigined char) のキャストをしない方が好ましい、て考え方もある。 >>360 ARM で GCC だと、単なる char は unsigined が普通みたい。 元のCPU設計で符号付8bitが拡張機能だったことと関係あるとかないとか。
- 374 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 08:41:45.88 ID:7BdcIkqa.net]
- 4bitのcharか、アルファベットが表現できないな
まぁ、341の例だと渡されるポインタ配列が文字コードの範囲内ならキャストは要らんね なんかの理由で文字コード外の数値が入ってきた時に文字揃えがズレる事を嫌って一応キャストしたって感じだとは思うけど
- 375 名前:デフォルトの名無しさん [2018/03/27(火) 09:55:59.95 ID:dDmfqIPV.net]
- int *p = new int[100];
delete[] p; delete[] p で int 100個分の領域を解放するのだと思いますが、 どうやって、 p が int 100個分の領域を指していると分かるのでしょうか? p は単なる int 型へのポインタです。
- 376 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 10:02:58.95 ID:GW1/xmrB.net]
- >>366
つ -fsigned-char/-funsigned-char
- 377 名前:デフォルトの名無しさん [2018/03/27(火) 10:03:09.61 ID:dDmfqIPV.net]
- スタックオーバーフローが起こった時に、すぐにエラーが起こらない可能性がある
そうですが、なぜ、エラー終了にしないのでしょうか?
- 378 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 10:56:59.81 ID:r9AxIBc/.net]
- >>368
良くある実装としては newが返すアドレスの前にヘッダ情報がある
- 379 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 10:59:24.01 ID:r9AxIBc/.net]
- >>370
(すぐに)わからないから
- 380 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 13:22:10.84 ID:KACb5w79.net]
- 素人考えだと並のOS環境ではスタックオーバーフローは自動伸長に失敗してアドレスを割り当てられない時に起こると思うから直ぐにエラー終了しそう
バッファオーバーフローの場合は割り当てたメモリとバッファ境界がミスマッチなら直ぐにエラー検出できないとしても仕方がないけどこれは質問とは別の話
- 381 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 14:41:48.71 ID:1PffFgMm.net]
- 配列への添え字アクセスの計算量はO(1)の定数時間とのことですが、これは通常の変数へのアクセスと同じということでしょうか?
例えばint型配列のfooとint型変数のbarがあったとして、 int n = foo[10000]; と int n = bar; の速度は同じですか?
- 382 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 14:55:45.68 ID:Z/OsE5Ku.net]
- 添字の値にかかわらず一定
foo[10000] と foo[1] が同じって話だぞ
- 383 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 14:59:13.83 ID:1PffFgMm.net]
- >>375
ありがとうございます だとすると、同じ添え字に何度もアクセス(読み取りのみ)する場合、一旦変数に待避させてその変数を参照した方がいいですかね?
- 384 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:02:49.07 ID:jMKP3TFv.net]
- レッツ実測&吐き出したコードを確認
最適化具合でも全然ちがう
- 385 名前:デフォルトの名無しさん [2018/03/27(火) 15:06:05.02 ID:dDmfqIPV.net]
- >>377
吐き出したコードってどうやって確認するんですか?
- 386 名前:デフォルトの名無しさん [2018/03/27(火) 15:06:56.79 ID:dDmfqIPV.net]
- >>371-372
ありがとうございました。 そのあたりのことを詳しく書いてある本はありますか?
- 387 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:07:03.67 ID:1PffFgMm.net]
- >>377
確かにそうですね ありがとうございます、やってみます
- 388 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:08:28.42 ID:Di3KX/fh.net]
- ポインタから値を読み込む場合は?
- 389 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 15:16:11.82 ID:jMKP3TFv.net]
- >>378
使っている環境による 機械語一歩前のアセンブラも出力するオプションで出てきたアセンブラとデータシートから推定する もっと前のアルゴリズムの検討は済んでて、 もはや、枝葉を削ってでも速度を出さなきゃいけないという最終段階の話だよね?
- 390 名前:はちみつ餃子 mailto:sage [2018/03/27(火) 17:26:05.07 ID:6NyejsSC.net]
- >>343-344
char 型が符号付きであってもなくても格納可能な範囲という意味では 0 〜 127 であると思って使ってれば間違いないのは確か。 あと、厳密にはマイナスの表現に 1 の補数を使ってる環境は有りうるので char が符号付きだとしても -127 〜 127 しか表現できないかもしれない。 >>345 言語仕様では文字がアスキーコードとは保証してないんだ。 ほとんどの環境ではアスキーコードかそれと互換な文字コードだろうけど、 EBCDIC とかでも言語仕様には違反しない。
- 391 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 18:20:11.37 ID:ofLFYE4b.net]
- >>373
並のOS環境って何だよwww 一般的なMCUのほとんどは アドレス変換テーブルの仕組みがなく スタックオーバーフローを検出するハード的仕組みも無い
- 392 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 18:21:21.80 ID:ofLFYE4b.net]
- >>383
無知は出てくるな
- 393 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 20:25:43.43 ID:GW1/xmrB.net]
- BASIC Stamp でもやってればいいのに
- 394 名前:デフォルトの名無しさん [2018/03/27(火) 22:12:36.71 ID:gjFRbLOq.net]
- 二
- 395 名前:つスレッドがある
片方はstd::queueにつんで、もう片方はそれを取る これで詰まれた瞬間に取るにはどうするのがいいのかな? 簡単に作るなら、無限ループでスリープ挟みながら取り続けることだけど、無駄も多いから積んだのをトリガーに取りたい 環境はg++とVC++です [] - [ここ壊れてます]
- 396 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 23:17:24.98 ID:7OwU1Hvz.net]
- >>379
stackoverflow で、たまたまアクセスしたメモリに、 どんな値が入っているかは、誰にも分からない。 単に前に入っていた値が、入っているだけだから その値が、たまたまCPU 命令にあれば、CPU を実行するから、 エラーになるのは次の命令以降になる 一方、CPU命令に無ければ、不正な命令となり、即座にエラーとなる
- 397 名前:デフォルトの名無しさん [2018/03/27(火) 23:21:17.42 ID:dDmfqIPV.net]
- スタックのメモリ領域がこの範囲からこの範囲というように管理はしていないのですか?
- 398 名前:デフォルトの名無しさん [2018/03/27(火) 23:30:03.49 ID:4E83+S2j.net]
- >>387
昔汎用メッセージポンプを検討したときのサーベイにstd::condition_variableと書いてある。 注意としてspurious wakeupというのも書いてある。 もうすっかり忘れてしまって何のことだか自分でも思い出せないのだが、「条件変数」というのがキーワードになるようだ。
- 399 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 23:38:12.48 ID:zFrY2ZyB.net]
- >>389
してる環境もあれはしてない環境もある
- 400 名前:はちみつ餃子 mailto:sage [2018/03/27(火) 23:46:19.51 ID:6NyejsSC.net]
- >>389
ページ単位ではしていることがある。 OS がメモリの割付を管理していて、 足りなければ追加で割り当てたりもする。 割り付けてないメモリ空間に変に触ったら検出できる。
- 401 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 06:54:26.81 ID:fYzIlbdt.net]
- >>389
スタックエリアの管理は当然してる オーバーランの監視は環境次第 ハード的に仕組みがあるものもあし ソフトで(コストをかけて)やる場合もあるし 全くしない環境もある
- 402 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 06:56:20.68 ID:fYzIlbdt.net]
- 今のWindowsとかLinuxとかならもちろん瞬時にわかる
- 403 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 10:17:21.31 ID:qnpV2Jxp.net]
- >>387
セマフォの類を使え
- 404 名前:デフォルトの名無しさん [2018/03/30(金) 10:25:28.98 ID:8epIcCej.net]
- 最近のC++ってかなり進化していてTaskとかLinqなんかもできるんだろ? PCだとC#があるから
C++は使わないが組み込みだとC++を使いたい。CからC++に変えてみようとおもっってテスト してみたことがあるが、メモリーを食い過ぎてStringはつかえなかった。 どこまでなら使えるんだろ? なにか目安はないか?
- 405 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:36:04.01 ID:Wx9gH+Ym.net]
- 組み込みなら自分で書いたものだけ使うというか
STLは一切使わないのが普通じゃないか?
- 406 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:31:15.37 ID:HVaF4kSp.net]
- new/delete
例外 ラムダ式 は使わない もちろん規模によるけど
- 407 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:36:38.56 ID:MnRWcQoL.net]
- 組み込みってピンキリだからなんとも言えんわ
業務用複合機なんてそこらのパソコンより凝ったハード積んでたりするし
- 408 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:43:29.07 ID:HVaF4kSp.net]
- >>398はMCU/DSPくらいの話
- 409 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:47:07.67 ID:TqB3XhjJ.net]
- どれぐらいのDSP?
ADSP-21573ぐらい
- 410 名前:デフォルトの名無しさん [2018/03/30(金) 13:46:55.20 ID:8epIcCej.net]
- STLってC#のLinq並みに表現力があるんだろうか? Linqは最初嫌いだったが使い始めて
見ると非常に便利で驚いた。C++のSTLは全然しらなかったがWikiを読んだらなんかかなり魅力 的に見えてきた。
- 411 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 13:52:10.17 ID:Wx9gH+Ym.net]
- 内部で new / delete 使用している stl は使わないリストに入れず
new / delete は使わないリストに入れんのかよ…
- 412 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 14:08:56.04 ID:2gx9kNrJ.net]
- STLコンテナとSTLアルゴリズム
どっちの話をしているんだ
- 413 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 14:25:29.65 ID:FxYI+k+J.net]
- コンテナ使わない有用なアルゴリズムってあるか
あるなら使いたいからご教授ください min とかあるか
- 414 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 16:24:55.88 ID:HVaF4kSp.net]
- >>403
内部でnew/deleteしてるものは当然含まれる 当たり前 そもそもヒープエリア自体無かったりするし あってもアロケートのみで解放機能が無かったりする 小規模組み込みでメモリを確保出来ないなんてことは想定しないし 確保解放のコストもバカにならない アドレス変換が無いから隙間だらけで連続領域が取れなくなるなんてことも心配したくない
- 415 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:52:31.93 ID:2aV4tUPq.net]
- 組み込みって未だにそんなメモリかつかつなの?
- 416 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:31:27.59 ID:aygih7Tk.net]
- >>407
そりゃ規模による
- 417 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:45:54.96 ID:OaeapR1O.net]
- >>407
>>399
- 418 名前:デフォルトの名無しさん [2018/04/02(月) 16:24:48.19 ID:MJzKsai7.net]
- ヘッダファイルを作るときに、2重インクルードを防止するための対策を書けと本に書いてあります。
注意していれば、2重インクルードをせずに済むにもかかわらずなぜ、このような 対策をしなければならないのでしょうか?
- 419 名前:はちみつ餃子 mailto:sage [2018/04/02(月) 16:30:09.86 ID:/drqX+oD.net]
- >>410
人間の注意力なんてクソザコだからだよ。
- 420 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 16:40:04.72 ID:3MXga4hP.net]
- 注意していれば防げるミスは、いつか必ず発生する
- 421 名前:デフォルトの名無しさん [2018/04/02(月) 16:42:16.37 ID:r6uHUG7/.net]
- 2重includeに気付いてからでも遅くない
- 422 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 20:45:42.01 ID:JDmrHTz8.net]
- >>410
複数のヘッダで共通のヘッダの定義が必要な場合を考えてみようか
- 423 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 20:57:46.72 ID:MJzKsai7.net]
- header_1
header_2 … header_n で共通に必要なヘッダ header_a がある。 header_1 header_2 … header_n のそれぞれの中で header_a をインクルードしている。 header_i と header_j (i ≠ j) が必要なファイル file1 がある。 というような状況でしょうか? 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
- 424 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 21:43:19.92 ID:JDmrHTz8.net]
- あなたはstdlib.hとstdio.hの作者です
stdlib.hとstdio.hの両方でerrno.hが必要だとします あなたはstdlib.h stdio.hの中でerrno.hをインクルードしますか?しませんか?
- 425 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 22:36:25.27 ID:7E1ezZvV.net]
- >>416
入門書にこう書きます 「studio.h や stdlib.h をインクルードする際には、事前に errno.h をインクルードすること」 どうかなとは思うが実際こういう流儀でヘッダーファイル書く人も見かける
- 426 名前:片山博文MZ mailto:sage [2018/04/02(月) 22:37:53.93 ID:APYGmZJZ.net]
- スタジオじゃなくてスタンダード・アイオーや
- 427 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 22:38:24.97 ID:7E1ezZvV.net]
- ごめんごめん
- 428 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 22:51:41.33 ID:Y3fpn4XN.net]
- なんで前半はフルで後半は省略したの?
- 429 名前:片山博文MZ mailto:sage [2018/04/02(月) 22:58:42.67 ID:APYGmZJZ.net]
- アイオー、アイオー、声を上げて
- 430 名前:片山博文MZ mailto:sage [2018/04/02(月) 23:06:11.93 ID:APYGmZJZ.net]
- Input/Output、日本語では入出力
- 431 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:10:11.92 ID:yv4S6fVx.net]
- 関数名にしろヘッダーにしろ6文字の縛りって何か歴史的理由があったのだろうか?
- 432 名前:片山博文MZ mailto:sage [2018/04/02(月) 23:22:51.53 ID:APYGmZJZ.net]
- fprintfは、7文字。
- 433 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:23:14.96 ID:yv4S6fVx.net]
- あー
- 434 名前:片山博文MZ mailto:sage [2018/04/02(月) 23:26:45.74 ID:APYGmZJZ.net]
- vfprintfは八文字。文字数削るメリットがあった時代だったからな。
- 435 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:48:48.36 ID:OHYuqcPP.net]
- >>423
つ FORTRAN77
- 436 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:55:39.95 ID:d0d9WT+s.net]
- >>423
FORTRAN77は識別子の長さが6文字以下とかの制限があったからそれに倣ったんじゃないかな
- 437 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:57:30.68 ID:yv4S6fVx.net]
- ありがとう FORTRAN からの流れですか
- 438 名前:デフォルトの名無しさん [2018/04/03(火) 00:51:55.59 ID:cU9BUIMs.net]
- >>416-417
プリコンパイルヘッダが汚れたり無駄にでかくなったりするからな
- 439 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:02:56.47 ID:FKLo0jPW.net]
- 以下のboost::factoryを使う練習用コードにおいて
https://wandbox.org/permlink/K1TIhC61VQztTbOd map<string, boost::function<base* (int)>> factories; とするとコンパイルエラーになり、ググって見つけた方法で map<string, boost::function<base* (int const&)>> factories; とすると何故かコンパイルが通り、問題なく動作します。 コンストラクタの引数が実際の int ではなぜ駄目なんでしょうか?
- 440 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 01:48:18.62 ID:JvEghgri.net]
- >>417
実装依存のヘッダファイルの場合とか、ユーザに事前にincludeしろとは言えないケースもあるよ
- 441 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:16:15.79 ID:1GcrBwMo.net]
- stackoverflow では boost::factory が引数の参照渡しを前提にしてるから、とあるな。
実際 factory 以外の普通の関数なら問題ないし
- 442 名前:デフォルトの名無しさん [2018/04/03(火) 02:31:59.43 ID:uUh7wFma.net]
- dxd9みたいにincludeすると可笑しくなるヘッダもあるしなーω
- 443 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 08:56:24.86 ID:1fV6RHaF.net]
- >>423-424
先頭6文字だけ見て一意に決まることが条件で、名前の長さ自体に制限はない、 じゃなかったかな。大文字小文字は同一視で。
- 444 名前:デフォルトの名無しさん [2018/04/03(火) 11:32:26.11 ID:R6gDm2yr.net]
- _st とか _s とかごちゃごちゃ付き始めたころからつまらなくなった
- 445 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 11:42:41.83 ID:MWvT17WL.net]
- ほんとそれ
- 446 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 11:43:28.33 ID:Z1fbtkqU.net]
- >>433
公式ドキュメントにはさらりと「技術的理由によりfunction objectに渡す引数はlvalueでないと駄目」と書いてあるのみなので、さっぱり理解できませんでした。 そもそもコンストラクタbase (int const&)は定義していないのにコンパイルが通るのが不思議・・・ 結局 boost::bind(boost::factory<derived*>(), _1); が何しているのか理解しないと先に進めなそうですね。
- 447 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 12:17:26.04 ID:1GcrBwMo.net]
- そこ bind しなくてもいいんじゃないだろうか
- 448 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 13:48:08.68 ID:Z1fbtkqU.net]
- >>439
引数のある関数の場合はboost::bindを使うのではないでしょうか? いちおう公式にもその例が書いてあります。 ちなみにどんぴしゃな質問がstackoverflowにあり、Answerには親切にDemoまで付けてくれてて、 速攻で解決したと糠喜びしたんですが見事にコンパイルエラーでした。 https://stackoverflow.com/questions/37137117/passing-arguments-in-constructor-with-boost-factory
- 449 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 15:04:56.72 ID:rDNMxPWT.net]
- >>440
引数を部分的に何かにbindしたfunctionを作るのがbindなわけで、 (add(a,b) の a だけ1にbindしてadd1を作るとか) 何もbindせず引数の順序も同じなら factories["derived"] = boost::factory<derived*>(); で良い
- 450 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:06:46.13 ID:t1HAuKeq.net]
- >>441
確かにbindのそもそもの目的はそれですよね>(add(a,b) の a だけ1にbindしてadd1を作るとか) 仰る通りの書き方でコンパイルも実行も通りました。 ただ、ググった限り引数のある場合はbindをかます例しか見つからなかったです。 「bindが必要」と明言してる人すらいて、結局よくわからないです・・・ その後、いくらコンパイルも実行も問題ないとはいえ実際のコンストラクタとは違うのを boost::function<〜> に指定するのはなんとも気持ち悪く思い、試行錯誤したところ boost::forward_adapter を使う方法を見つけました。 https://wandbox.org/permlink/D3Q75cgRNR43Nulc ヒントとなったのは以下のサイトでした。 https://lists.boost.org/Archives/boost/2017/02/232695.php 正直なぜこれで通るのか完全には理解していませんが、とりあえずの解決とします。 ご助言どうもありがとうございました。
- 451 名前:はちみつ餃子 mailto:sage [2018/04/05(木) 03:23:00.79 ID:3RJ8YXR4.net]
- >>442
公式にドキュメントがあるだろう。 なんでググりまくるんだ?
- 452 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 07:41:24.21 ID:ev3xPrwL.net]
- >>443
公式ドキュメントはこれです。 https://www.boost.org/doc/libs/1_66_0/libs/functional/factory/doc/html/index.html ここに以下のような「stringキーzとコンストラクタのmapにコンストラクタを登録」するという方法が書いてあればよかったのですが・・・ map<string, boost::function<〜>> factories; factories["derived"] = 〜 でもboostの公式ドキュメントはこんなものというか、隅から隅まで説明しないわからない素人はお断りってやつですよね。
- 453 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:37:25.23 ID:LhrJ/WaU.net]
- 質問です.
以下のようなことが書いてあるファイルを読み込んで, 文字列,数値,...,数値,数値...数値 ... str, a[0],...a[n-1],b[0],...b[m-1] という配列に入れたいです. nとmは可変の場合,どうすればよいか教えてください. スッキリとした書き方が知りたいです. std::string str; double a[n],b[m]; です.
- 454 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:51:56.82 ID:8vk43UVU.net]
- std::string知ってるなら
std::vectorを使えば早かろう std::vector<double> a, b; a.resize(n); b.resize(m); a[0] = ...
- 455 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:54:56.53 ID:AQLHpii5.net]
- 可変の n, m が読み込む前に確定するのか
ファイルの記述内容から n, m が確定するのか
- 456 名前:445 mailto:sage [2018/04/05(木) 15:16:31.21 ID:LhrJ/WaU.net]
- >>447
今回はstringを見て,nとmを決めます. str="a"ならn=2,m=3のような感じです. >>448 読み込み方が分かりません.すいません. Google先生に聞いてこんな感じのプログラムを書いてます. std::string line; std::ifstream infile("hoge.dat"); std::getline(infile,line); sscanf(line.data(),...//どう書くの?
- 457 名前:デフォルトの名無しさん [2018/04/06(金) 18:11:46.66 ID:CDFchtjR.net]
- void Show(const IntArray& array){
... } というような関数内で、 array の const メンバ関数ではないメンバ変数を変更しないメンバ関数を 使っているとコンパイルエラーになりますが、それはなぜでしょうか? コンパイラーはarrayのメンバ関数がメンバ変数を変更していないことはソースコードから 分かるのではないでしょうか? そういうチェックをするコンパイラを作るのは難しいからということでしょうか?
|

|