C++相談室 part157

■ このスレッドは過去ログ倉庫に格納されています
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
2021/10/11(月) 08:08:27.81ID:M/9mFHzI
>>556
マウント取る取らないとかどうでもいいです
あなたが理解できないのをどうにもできないだけなんです
2021/10/11(月) 08:46:34.77ID:pMbZgi1h
と言うことにしたいのですね
2021/10/11(月) 09:17:45.21ID:G+wdAsto
リエントラント目指してもいいじゃないの
2021/10/11(月) 09:58:01.98ID:F+cmXQty
クラスの型を自動変換して関数に入れるにはどうすればいいですか?例えば、

class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};

int function(A aaa);

があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
2021/10/11(月) 10:22:18.86ID:T3qmZxdk
>>560
Bを受け付けるfunctionを書くんや
2021/10/11(月) 10:50:11.05ID:QW1mycSW
B extends A
としたら
function
の引数をキャスト?で動かない?
2021/10/11(月) 10:54:01.94ID:RUUSz/4T
簡単や
template<class A>
int function(A aaa);
2021/10/11(月) 12:11:05.48ID:F+cmXQty
できました。ありがとうございます。

また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?

std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
2021/10/11(月) 12:31:51.97ID:T3qmZxdk
参照を使うんや
2021/10/11(月) 13:03:47.84ID:NaSXzxBw
参照のvectorなんて作れたっけ?
2021/10/11(月) 13:16:00.26ID:T3qmZxdk
reference_wrapper使うんや
まあ下らんこと考えんほうがええ
2021/10/11(月) 17:28:01.69ID:0Mn4AOx6
>>564
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。

性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
2021/10/11(月) 20:43:04.76ID:bPHZE8G4
言ってることは同意だが、ポインタの型もまともに書けないような人に言われても説得力がない
2021/10/11(月) 20:47:36.58ID:c9XBGwkD
Rustと間違えたんじゃね
2021/10/11(月) 22:25:40.15ID:RUUSz/4T
簡単や
std::vector<std::shared_ptr<A>>
2021/10/11(月) 23:13:38.91ID:9gfKW03X
ドラクエ3のバージョン違いの謎に迫る!
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み

FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・
573デフォルトの名無しさん
垢版 |
2021/10/12(火) 04:13:48.50ID:jMkI4z1q
ぶっちゃけ継承とかポリモフィズムはオワコンでテンプレート最強?
2021/10/12(火) 04:25:26.30ID:WB1ScBpO
>>573
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。

しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。
2021/10/12(火) 06:45:14.85ID:LoAbYEbi
継承が有効に使われている事例をひとつも知らないヒヨっ子丸出しな質問だな
テンプレートの何がいいのかもわかってなさそう
2021/10/12(火) 07:03:36.18ID:bL2VfUhD
CRTPとか見たら脳を壊しそう
2021/10/12(火) 07:24:36.11ID:+oJUuDWk
>>576
virtual使えないor使わない処理系で、使ってみたけど確かに頭にスッキリ入らんパターンだわw
あれはあれでポイントで使うと便利だし、反対にやっぱvirtualも便利でいいよねーとか。
2021/10/12(火) 08:16:42.08ID:4AIb2U7h
>>573
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。

総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
2021/10/12(火) 08:20:36.96ID:vDVhyOYS
耳が腐る
2021/10/12(火) 09:51:23.11ID:kjIGaWla
何でこんな荒れてんの?
2021/10/12(火) 10:09:23.54ID:qN1bonoC
いつものこと
2021/10/12(火) 10:40:17.54ID:kjIGaWla
単発荒らしか
2021/10/13(水) 04:27:45.44ID:yxtzEQdj
void * の生ポが最強
2021/10/13(水) 07:29:48.53ID:w2mbz/VV
○○なんていらねーよ害悪だけだ
まだ使ってるやつは全員バカ
これからは△△を使うべきだ
なーんて言っちゃってマウント取った気になってるおめでたいやつ
メガトン級にアホにされてることに気付かねえよな
585デフォルトの名無しさん
垢版 |
2021/10/13(水) 09:41:39.46ID:V99uCirA
vector を shuffle する場合について質問です(gcc/windows10でテスト)

vector<int> vec(50, 0);
for(int i = 0; i < 10; ++i) vec[i] = 1;
random_device dev_seed;
mt19937_64 mt(dev_seed());
shuffle(vec.begin(), vec.end(), mt);

で確かに shuffle されているのですが疑問点がいくつかあります
1.dev_seed()が毎回同じ値を返してる?
(random_deviceの使い方を間違えてる?)
2.先頭の値が1に偏ってる?
(shuffle() を数回繰り返す解決方法もあるようですがあまり気持ち良くないです)
3.そもそもforで先頭の方に1を入れる発想が良くない?
(shuffleされてるならこれは関係無いと思いたい)
586デフォルトの名無しさん
垢版 |
2021/10/13(水) 09:47:25.08ID:V99uCirA
ああこれか
https://cpprefjp.github.io/reference/random/random_device.html
>GCC (MinGW): GCC 9.1までは擬似乱数生成器 mt19937 を用いるため使用を推奨しない。詳細は備考欄を参照。GCC 9.2からは暗号論的な乱数である rand_s を使用する。
2021/10/13(水) 10:51:16.02ID:ocY7/s3a
偏りを判断する目が偏ってるのでは
2021/10/13(水) 12:39:29.13ID:L2HfUVD6
random_deviceがダメな環境でrdtsc命令使ったことあるな
良いやり方かは知らん
2021/10/13(水) 16:09:05.50ID:SuRXriSW
https://cpprefjp.github.io/ って
https://ja.cppreference.com/ があるのになんで使われてるの?
2021/10/13(水) 16:23:55.69ID:6cp7j/AO
>>589
前者は編集者による解説なども含んでいて仕様の意図や習慣がわかりやすい。 実装の現実みたいな補足もあるし。
後者は仕様書の再編を指向してるから正確だけど規則の羅列を読むのがしんどいこともある。

適宜使い分けて。
2021/10/13(水) 16:49:55.63ID:SuRXriSW
>>590
ありがとう
2021/10/14(木) 00:25:54.44ID:unU20Liw
逆にjaはほぼ見ないな
cpprefjpかen
593デフォルトの名無しさん
垢版 |
2021/10/14(木) 17:38:44.33ID:0xmYH4RJ
みんなで広げよう友達の輪
https://github.com/cpprefjp/cpprefjp.github.io
594デフォルトの名無しさん
垢版 |
2021/10/14(木) 19:08:30.88ID:D5VUtH01
今までJavaでやってきたけどC++もやってみたいんだよね
すぐ出来るようになると思う?
2021/10/14(木) 19:10:28.43ID:u3valL3D
>>594
ならない
C言語のポインタや文字列について勉強したほうがいい
2021/10/14(木) 19:12:47.65ID:pMO89bX6
>>594
c++でちょっとした文字列パースして内容に応じたオブジェクト構築する処理書いてたの、
ほぼ使ったことないJavaに移植したらスゲー早く出来てワロタ。C#もサクサクできたな〜
逆は色々イラッとするんじゃねぇかな?
2021/10/15(金) 01:29:52.42ID:oSpeFu2A
元々C++はその辺の文字列処理を毎回1からゴリゴリ書くような言語じゃなくて何らかのライブラリを利用するものだと思うけど、
クロスプラットフォームで各種文字コードが自由に扱えて、c++11以降の仕様に対応してて、かつかゆいところに手の届くライブラリって意外とないんだよね
いや、俺が知らないだけかもしらんけどw
2021/10/15(金) 05:56:29.15ID:JZ8LRo6T
実質的な標準と呼べるものは今もないよ
2021/10/15(金) 09:26:39.59ID:c8xS1fS2
>>596
std::regex使ってようやっと、かね。

c++はいつまでたっても文字列処理苦手なままだわ。
600デフォルトの名無しさん
垢版 |
2021/10/15(金) 10:21:28.25ID:Sjupi756
Javaから入ると不能(陰ポ)になる
もう手遅れ
601デフォルトの名無しさん
垢版 |
2021/10/15(金) 10:22:26.59ID:Sjupi756
>>597
wxWidgets
2021/10/15(金) 10:26:50.27ID:Eg3Mb3n8
あれ出来上がるバイナリ重すぎなんだけど、今は違ったりするのかね
603デフォルトの名無しさん
垢版 |
2021/10/15(金) 11:49:16.16ID:Sjupi756
Debugだとバカデカくなるけど
Releaseは気にならないレベル
(DLL除く)
2021/10/15(金) 11:53:45.11ID:JZ8LRo6T
std::regexと等価なインターフェースを各々の正規表現ベンダーが用意してくれればいいんだが、それすら実現されていないお寒い状況
2021/10/15(金) 12:03:59.88ID:XHojpqKh
>>599
その辺も無いわけじゃないんだけど、クラスの構造どうしようかとか、メモリ管理どうするかとか、
変態trmplateでパズルしてみようかとか、選択肢多い分考えることも多い部分で時間かけることが
多い所はあるなーって。それがC++使いたい動機の裏返しでもあるんだけど。
あと本人の問題120%だが、ボケて油断してると、エラー直すのにやたら時間かかったりで。
Javaとか詳しく知らん状態だから言えるのかもしれんけど、もうこうするしかネェってレールが
最初からあるような印象でした。つかオラクルのライセンス問題のほうがムズいw
2021/10/15(金) 12:19:11.94ID:Q47teFml
等価って図々しいだろ
2021/10/15(金) 12:34:03.36ID:Ax3dDCZ3
std::regexみたいな文字コードというものがあることを知らない人間が作ってそうなものを標準だと思ってつかうのはやめたほうがいいと思います
2021/10/15(金) 12:53:35.21ID:JZ8LRo6T
char8_tが導入されたんだからutf-8しばりでいいじゃない
2021/10/15(金) 13:14:36.67ID:x+xcCYcO
なんか最近曖昧な上に突っ込む点多すぎる内容的にはどうでもいい話題が多くない?
2021/10/15(金) 13:33:42.62ID:ma4A3Lrr
>>607
utf8限定ならそこそこ。
もうutf8がデファクトだから、内部処理はutf8に統一した方がいいよ。
2021/10/15(金) 19:29:27.64ID:0K4QrynR
>>608
内部コードは utf-32 でやっているので、utf-32 縛りのほうがうれしいです‥
612デフォルトの名無しさん
垢版 |
2021/10/15(金) 19:56:39.74ID:JZ8LRo6T
>>611
はぁ?
std:::basic_regex<char8_t>、std::basic_:regex<char16_t>, std:::basic_regex<char32_t> のどれでも好きなの使えばいいじゃん
613デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:01:47.12ID:JZ8LRo6T
ところで、char16_t、char32_tってエンディアンはシステム依存しばり?
614デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:03:20.51ID:eqKsqNtm
ちなみに、いま使えるみたいですよ。
むかしは使えることになってるのに実際は使えなかったんだけど。
自作イテレーターにも対応してるようです。
アップルは知らんけど。
Ubuntu+gcc、Windows10+clでは自作イテレータでstd::regex<>が使えました。
これは、HTML、XML、JSONのデータ構造からコンテンツ内のみを検索のような事に使えます。
標準から外れるような議論もあるそうですが、便利なので外れないように抗議していきましょう。
615デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:12:21.03ID:eqKsqNtm
C++20でchar8_tが入ると便利になりますよね。
2021/10/15(金) 20:12:58.12ID:Q47teFml
>>613
規定しない
なのでそういうのはそこでは気にしない
617デフォルトの名無しさん
垢版 |
2021/10/15(金) 20:35:46.40ID:eqKsqNtm
STLはセントルイスの略。
では、GCCは何処でしょう?
2021/10/15(金) 20:50:28.66ID:R98eOYn2
つまんね
619デフォルトの名無しさん
垢版 |
2021/10/15(金) 21:40:43.65ID:HBylJ5Wv
平面3リンクマニュピュレータの逆運動学のプログラミングが分かりません。
キーボードで手先の位置を入力すると、関節角が表示されるようにしたいです。
scanfを使うのと、アームの長さなどは適当に決めていいという条件です。

わかる方いたら、送って欲しいです。
2021/10/15(金) 22:21:16.57ID:fUsvamq4
>>619
どこの大学のなんていう授業か教えてくれたら送ってあげる
621デフォルトの名無しさん
垢版 |
2021/10/15(金) 22:41:19.44ID:HBylJ5Wv
大した大学ではないです。ロボット工学です。
2021/10/16(土) 10:16:02.78ID:pBeCkfuy
>>619
冗長マニピュレータで一意に求まらん。制約条件設けてるはずだが。
623デフォルトの名無しさん
垢版 |
2021/10/16(土) 11:55:15.40ID:NekA8urB
>>622
リンクの長さは良さそうな値を定義してください。関節の座標はこちらで決めずにあくまでも手先の位置・姿勢であるxed、yed、φedから計算で出します。解が複数出てくるので、全ての候補を求めてください。
例えば、リンクの長さは根元から順に0.3m、0.3m、0.05mなどで良いです。
プログラムとしては手先の目標値を入力して、θ1、θ2、θ3が出力されればOKです。
624デフォルトの名無しさん
垢版 |
2021/10/16(土) 12:05:17.39ID:NekA8urB
>>622
目標値は、x=0 y=0.3m φ=90degがいいと思います。先ほどのリンクの長さの設定値で楽な姿勢でロボットの手が届く範囲ですので。
2021/10/16(土) 12:08:52.99ID:pBeCkfuy
>>623
手の姿勢まで指定してて >>619 と違う問題になってんじゃん。どんなテキストにも解法載ってる問題丸投げしてんだな。
626デフォルトの名無しさん
垢版 |
2021/10/16(土) 12:14:57.04ID:NekA8urB
>>625
テキストに載ってないからここで質問してるんですよ。手の姿勢は例えばの話ですよ。どっちみちscanfで入力するんですから。
2021/10/16(土) 12:22:50.77ID:pBeCkfuy
>>626
問題が違うっつうの。
ロボット工学のテキストには必ず載ってる。よく読めアホ。
628デフォルトの名無しさん
垢版 |
2021/10/16(土) 12:35:46.33ID:NekA8urB
>>627
日本語分かる?プログラムは載ってないから。教科書に載ってるから見ろって丸投げしてんのどっちだよ。
2021/10/16(土) 13:20:33.97ID:N8k1BZc2
>>628
お前だよどう考えても
2021/10/16(土) 13:59:18.07ID:Ilt9CI+j
答える価値がないと思うなら放置しろよ
くだらねえ煽りやってんな迷惑だ
2021/10/16(土) 21:12:30.56ID:pBeCkfuy
>>628
プログラムが載ってるわけねえだろ、アホ。
載ってんのは**解法**(>>625)
2021/10/16(土) 21:15:24.70ID:1x8IpOH2
> どっちみちscanfで入力するんですから。
このレガシーさには誰も何も思わんの?笑
2021/10/16(土) 21:21:35.71ID:gJanIysk
ssfanf_s()を使った方が(%sとかについて)ちょっと安全
2021/10/16(土) 21:31:10.24ID:ex7yhveJ
安全性の話じゃねえだろ
2021/10/16(土) 21:53:50.46ID:EatL4YvD
わざわざC++なんか使っときながら勉強不足でモロアンチパターン踏んでるバカ
よくいるよね
2021/10/16(土) 22:09:18.72ID:n5lzAHDj
どういうの?
2021/10/16(土) 23:14:18.41ID:gJanIysk
やっぱ普通fgets()して1行全体を読み込んでからstrtok_s()使いマスヨネー
2021/10/16(土) 23:16:29.16ID:gJanIysk
文字列の数値化はstrtol()、strtoul()、strtof()、strtod()をオーバーロードしたwrapper関数を呼ぶテンプレートにすれば
cinと同等の型安全性と同等以上の使い勝手が実現にできるし、
2021/10/16(土) 23:41:33.15ID:VgkITY1O
C++な人ってゴリゴリ自分でBNF的なparser combinator書くイメージだな
わざわざcstring使う人はいない気がする
2021/10/16(土) 23:45:41.19ID:gJanIysk
いろんな人の手を経たプロジェクトだと CString(Windows) と std::string
(ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ
2021/10/16(土) 23:46:44.02ID:VgkITY1O
えーっと・・・cstringはC言語のstring.hのことだよ
2021/10/16(土) 23:53:12.21ID:gJanIysk
しらそん
いちいち
#ifdef __clusplus
# include <cstring>
# include <cmath>
#else
# include <string.h>
# include <math.h>
#endif
みたいな書き方するん会、
643デフォルトの名無しさん
垢版 |
2021/10/16(土) 23:54:09.02ID:6ga3nra2
json文字列として入力データを受け取って既存のjsonライブラリでパースするのが無難じゃないですかね
2021/10/17(日) 09:22:32.00ID:4Zt4uwKf
C++でfgets使うアホの世界チャンピオンがいるな
2021/10/17(日) 09:40:16.91ID:Rn6uB4uI
壊れても居ないものを直そうとするヴァカに言われたくはないし、
行の長さが定まっていないみたいなアフォな外部データ設計でない限り
fgets()で軽くて十分
2021/10/17(日) 09:48:08.24ID:4Zt4uwKf
直すって何を?
ああ、おまえさんの頭か
2021/10/17(日) 11:05:04.47ID:cds0CTiX
今ならメモリ不足とか気にする必要はほぼないから、
fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね
2021/10/17(日) 11:06:37.70ID:XrR+wpGu
MSVCのfgetc()とfgets()は実行速度が遅い
2021/10/17(日) 11:19:23.83ID:Rn6uB4uI
>>646
ちゃうちゃう、目新しいという以外にメリットも無いのに飛びつく誰かさんの方

>>647
行の長さが定まっていない仕様というのは大変恐ろしいことでありまして、
40TBの入力も許容するという意思表明なのであります
2021/10/17(日) 11:23:35.72ID:XyIQiUpb
どれもこれもザックリすぎて話にならない
2021/10/17(日) 11:24:11.36ID:Rn6uB4uI
こと外部データに関しては、読み込み終えないとサイズがわからない、みたいな仕様は悪手
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる
2021/10/17(日) 11:27:15.30ID:XyIQiUpb
fgets使うくらいならOS固有の関数を呼ぶべきだと思う
readとかReadFileのことね
2021/10/17(日) 11:30:16.75ID:Rn6uB4uI
>>652
バッファリングを自力で実装するんか……
デバイスドライバ側である程度何とかしてくれるケースもあるかもしれんが
2021/10/17(日) 11:30:46.37ID:0m7FLjXf
>>652
ええ…
655デフォルトの名無しさん
垢版 |
2021/10/17(日) 11:47:07.94ID:XrR+wpGu
真理情報:fgets()はUTF-16やUTF-32のテキストファイルを正しく読み込めない
2021/10/17(日) 12:13:01.70ID:0m7FLjXf
ワイド文字用の関数は使っちゃだめということ?
まあ使い方よくわからんけど
2021/10/17(日) 12:16:45.02ID:XrR+wpGu
HTMLなりXMLなりJSONなりそれぞれパーサーがすでにあるのだからその恩恵を享受するのがナウなヤングの取るべき道でしょ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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