X

C++相談室 part160

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/04/15(金) 08:39:32.42ID:WMzvufu2
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
2022/04/26(火) 20:43:50.48ID:VyKiRhui
>>468
OutputDebugString
2022/04/26(火) 21:13:27.66ID:2YgT13Zl
>>470
それってwin限定ですけど?
2022/04/26(火) 21:23:44.97ID:BZkG8yBX
SEHの件もそうだが
Windows特有の話をC++の話だと思いこんでいるダメな人たちが一部いるよな
2022/04/26(火) 21:27:09.59ID:LprfjWj1
C++のfopenをCreateFileで実装するのは当然不可能
C++のfopenだけの独自の処理を追加し
C++のfopenとは仕様が異なる部分も対応し
C++のfopenのために書かれたコードがC++のfopenを実装している
2022/04/26(火) 21:28:50.73ID:y9ESXUU8
マイクロソフト信者はおかしい
2022/04/26(火) 21:29:15.00ID:LprfjWj1
>>471-472
文句を言う前に環境書けよ
2022/04/26(火) 21:47:04.72ID:2YgT13Zl
>>475
std::cout << "bakadesuka" << std::endl;
は環境によらず、標準出力に出力されますよ
477デフォルトの名無しさん
垢版 |
2022/04/26(火) 21:54:04.27ID:FD0QYxhU
なんだかんだ言ってWimdowsは便利。
2022/04/26(火) 22:01:46.99ID:LprfjWj1
>>476
それでいいのか?w
2022/04/26(火) 22:06:05.51ID:2YgT13Zl
>>478
お前ら、まじでみなまで言わないとわからないんだな
皮肉が分からないのか
480デフォルトの名無しさん
垢版 |
2022/04/26(火) 23:56:13.17ID:FD0QYxhU
>>479
ちょっと、説明してみて。
2022/04/26(火) 23:59:16.33ID:dZOuwtIw
>>477
スペルミス笑った
482デフォルトの名無しさん
垢版 |
2022/04/27(水) 00:02:04.50ID:x9fHeieP
>>481
パソコン買い換えたばかりで、キーボードを打ち間違えるんだけど、「わざとです」ってことにしとくわ。
2022/04/27(水) 01:00:29.05ID:9dk3kBsG
まじでバカばっか
皮肉でたとえ話してんのに、額面どおりうけるやつ。。。

お前らと仕事だったら大変だな
一から十まで説明しなきゃいけなそうw
484デフォルトの名無しさん
垢版 |
2022/04/27(水) 01:09:56.50ID:x9fHeieP
>>483
ちょっと説明してみて。
2022/04/27(水) 02:03:48.20ID:yb/peNBg
「デバッガに出力」ってそもそも正確にはどういう意味だろう

Unix系OSでのOutputDebugStringの代替ならこちらをどうぞ
syslogを使う方法、sysctlでデバッガを検知したときだけstderrに出力する方法等が紹介されている
https://stackoverflow.com/questions/417745/os-x-equivalent-to-outputdebugstring
2022/04/27(水) 02:05:24.94ID:gWhhdIlX
C++の規格書にデバッガという単語は出てきますか?
2022/04/27(水) 02:12:09.12ID:fiJD2DKf
ID:2YgT13Zl「皮肉で例え話してるのに...」
大多数「(どこが皮肉なんだろう...)」
488デフォルトの名無しさん
垢版 |
2022/04/27(水) 06:21:23.13ID:1MxxbY3W
*(int*)0xffff0030 = 0x05; は環境に依存するが
C++標準の機能のみを使っていて独自拡張ではない

void our_customers_function();
our_customers_function();
これもそうだ

非標準の話をするなという原理主義者は
こういうのは受け入れるということか?
2022/04/27(水) 06:44:04.98ID:8t/7qtgE
>>488
お前は何と戦っているんだ?
490デフォルトの名無しさん
垢版 |
2022/04/27(水) 06:55:22.54ID:1MxxbY3W
何とってちゃんと書いてんだろ
2022/04/27(水) 07:00:37.34ID:gWhhdIlX
そろそろC++標準化委員会2ちゃんねる支部作ろうぜ
2022/04/27(水) 07:47:51.58ID:BxFepXA5
今どき2ちゃんねるって…
2022/04/27(水) 23:09:34.58ID:9dk3kBsG
>>491
おれ、アンドレイ役でいいか
494デフォルトの名無しさん
垢版 |
2022/04/29(金) 14:30:18.41ID:QTN7M4PZ
>>493
いや、エピステーメー役でお願いします。
2022/04/29(金) 19:12:43.62ID:g4xa57bn
じぁあ俺は江添やるわ
2022/04/29(金) 20:24:36.60ID:1rxQCQBS
江添はもう C++ にはやる気なくしてるっぽいぞ。
2022/04/29(金) 20:44:15.30ID:+Yy6lNMl
江副さんは今は何に興味あるのかしら
なんでc++やる気なくなったんだろ(´・ω・`)
2022/04/29(金) 21:36:57.56ID:1rxQCQBS
>>497
今は C++ 関連ではない仕事をやっているので C++ に対して時間が取れないということと、
C++20 に追加された一部の機能 (ロケールまわり?) に懐疑的だということは江添のブログに数年前に書かれている。
彼は C++ の規格については強い関心を持っていたし解説・教育にも熱心だったが、
プログラミング自体はそんなに意欲的な感じではないんだよな。
好きにやれるポジションを失ったことでやる気をなくしたんだろう。
細かい心情の機微はわからんけどな。
2022/04/29(金) 22:32:49.28ID:0jFDYffV
てっきり素行不良が祟ってパブリックな場で出禁食らったのかと
2022/04/29(金) 22:37:01.98ID:HFxeU7J0
( ^ω^)もうC++の規格に熱心な人はいないんですかお?
2022/04/29(金) 22:39:33.37ID:IgththV2
C++とは仕事の付き合いなので
それ以上に彼のことを知ろうとは思いません
502デフォルトの名無しさん
垢版 |
2022/04/29(金) 22:42:26.90ID:ANHZfN1C
MZうyちゃーーーん♪はこっちに戻ってたのかw
2022/04/29(金) 23:32:54.20ID:fFwxA39Q
江添なんて仕様把握だけで俺すげーしたかっただけの奴だからな。
それすら満足にできなくなっていじけてるんだろ。
2022/04/29(金) 23:40:47.95ID:rnNwZVLJ
プログラムの書き方的なところへの興味はどうなんじゃろうね
2022/04/29(金) 23:44:21.28ID:1rxQCQBS
江添が仕事で実務的なプログラムを C++ で書いたことがあるのかはようわからんが、
少なくとも外部に発表したのは文章ばかりで、完成したアプリケーションを発表したことはほとんどない。
俺が知っているのは彼がドワンゴに入るよりもずっと前に Windows 用ソフト (というかとあるソフトのアドオン) を
公開したのを見たのが最初で最後だ。
2022/04/29(金) 23:54:37.33ID:Geo4ukio
仕様ばかりに詳しくても何の役にも立たない

大抵の仕事は言語の細かな仕様まで知らなくてもC++98程度の知識でおおむねこなせるし
2022/04/30(土) 00:06:07.15ID:X9Bb5Kqd
さすがにやだよ、c++11より前のは
2022/04/30(土) 00:20:09.66ID:jfGNsSDk
程度問題だわな。
俺も今の C++ は C++11 が最低ライン (もちろん可能ならもっと新しい版) だと考えている。
あまり古すぎるのはかえって学ぶのに資料が見つけにくくなっている場合もある。
2022/04/30(土) 02:51:19.52ID:wKbezNiV
C++11に詳しそうだから教えて
あるテンプレート関数に渡される関数ポインタ、メンバ関数ポインタ、ファンクタ、ラムダの
戻り値の型を取得する方法を教えて

template<class R,class E,class...A> R f(E&& e,A... a)
{
using TypeOfCallableExec=/*ここ*/;
//...
}
510デフォルトの名無しさん
垢版 |
2022/04/30(土) 03:49:46.04ID:zRkNYUvD
>>509
C++17より前ならstd::result_of
C++17以降ならstd::invoke_result

return e(a...); とするつもりならRは不要。
返り値型はdecltype(auto)、
TypeOfCallableExec=decltype(e(a...));か、
TypeOfCallableExec=typename std::result_of<F(A...)>::type;
とでもしておけばいい
2022/04/30(土) 05:43:50.13ID:wKbezNiV
あいかわらず、いい加減な回答だなw

それでやってみろよwwww
2022/04/30(土) 07:04:59.56ID:2aZ7UOTr
構造体中の配列の特定の要素に対するメンバポインタって何で使えないの?

struct STRUCT {
int array[4];
};

int STRUCT::*pt = &STRUCT::array[2];

こんな事をやりたい

offsetofを使えって?
2022/04/30(土) 09:31:27.50ID:OR8SZm5l
>>512
同じことを思ってる人がいるけどダメっぽい
https://stackoverflow.com/questions/674635/member-pointer-to-array-element
2022/04/30(土) 10:58:35.53ID:pjMZxOoQ
質問ですが
他から渡されてきたstd::cout(ていうかstd::ostream)について
std::cout << std::left; (またはstd::right)
std::cout << std::setfill('_')
の状態が現在どうーなっているか知る方法って何かあるんでしたっけ

あと、ストリームに対して(独自のstd::left/std::right、std::setfill()を設定を含む)
独自フォーマットで出力した後ストリームの状態を元に戻す方法って何かあるんでしたっけ
std::ostringstream os; としてosに対してで独自フォーマットで出力して
std::cout << os.str();
ぐらい?
しかしこれにしてもstd::cout << setw(10000) << std::left << std::setfill('0');
とかされていたら左詰め/右詰め/パディングが独自フォーマットとして制御し切れていない気が……
2022/04/30(土) 11:11:18.79ID:pjMZxOoQ
つか実はostreamは使い終わったら、独自に使った書式指定について
cout << resetiosflags(...);
でリセットするのが作法?
516デフォルトの名無しさん
垢版 |
2022/04/30(土) 11:40:17.38ID:u0zlL0D0
('_')と('0')が顔文字に見えた
2022/04/30(土) 11:49:21.15ID:qP6dl9mx
 ('_')
||
| つ('0')
2022/04/30(土) 11:50:48.98ID:xinPqoeI
>>514
left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
https://en.cppreference.com/w/cpp/io/ios_base/flags

書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
https://stackoverflow.com/questions/2273330/restore-the-state-of-stdcout-after-manipulating-it
2022/04/30(土) 12:10:48.58ID:pjMZxOoQ
>>518
>left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
なるほど……

>書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
なるほど……
書式設定を記憶するだけのためにstd::iosオブジェクトを作るのかmjk、、、
2022/04/30(土) 13:59:17.37ID:M4ctbMgQ
https://ideone.com/JPtQV9
VCでは通らないが、GCCでは通るコード。正しデバッグ中・・・。

ブロックソート書いたんですよ、ブロックソート。
安定ソート書けないから横着してアルゴリズムヘッダーのヤツ使ったんですよ。
落ちるんですよ。

誰かたすけて!
2022/05/01(日) 05:16:07.73ID:RKDZOMoi
おまえらさぁ
openAPIがロハなのになんでいつまでもVCなんか使ってるのさ?
2022/05/01(日) 05:48:25.64ID:TlTI4EO+
円盤でお願いします
2022/05/01(日) 07:28:35.35ID:cO13JXSW
>>520
31行目で A = B = DD; しないで return してしまってるけどいいの?
2022/05/01(日) 09:52:18.27ID:nBd2wfSC
>>523
がーん。ありがとう。ありがとう。
https://ideone.com/Bb65gm
こんな感じになりました。デコーダ書かなきゃ。
525デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:31:24.77ID:ukM6vErn
あるプロセスで、変数の型とアドレスはわかってるものとして、
それをc++のプログラムから書き換えるにはどうすればいいんですかね?
調べても情報があまり出てこなくて...
2022/05/01(日) 14:43:19.26ID:9TCpWNNH
>>525
アドレス分かってるんならそこにアクセスすれば
でもC++からはわかるわけねえわ
2022/05/01(日) 14:53:21.11ID:vJsN8meg
こんなんでいいんじゃね
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
2022/05/01(日) 14:55:46.12ID:t4/NhzPt
他のプロセスからってことじゃないの
WindowsならReadProcessMemory/WriteProcessMemory
2022/05/01(日) 14:56:17.49ID:KjQtFKQ9
アドレスがわかってると言いながら実は空間が違うとか。
530デフォルトの名無しさん
垢版 |
2022/05/01(日) 14:58:07.61ID:ukM6vErn
すみません、説明不足でした。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
2022/05/01(日) 15:03:02.21ID:9TCpWNNH
linux的にはptraceを調べるとか…
2022/05/01(日) 15:07:04.74ID:t4/NhzPt
リバースエンジニアリングでしょ
環境依存だしここで有益な答えが返ってくるとは思えない
2022/05/01(日) 15:07:49.80ID:k85aGXIq
実行時に書き換えるならば排他制御が必須
2022/05/01(日) 15:11:01.84ID:Z9kcLIQb
スタック変数やヒープ変数を実行前に書き換えるのは不可能
535デフォルトの名無しさん
垢版 |
2022/05/01(日) 15:13:35.34ID:ukM6vErn
皆さんありがとうございます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
2022/05/01(日) 15:47:36.66ID:V8gMjhaX
>>534
プロセスって言ってんだから実行中の話だろうjk
2022/05/01(日) 16:19:28.57ID:pvwx8N/t
>>521
oneapi でなく openapi というのがあるの?
538デフォルトの名無しさん
垢版 |
2022/05/01(日) 16:52:28.16ID:ukM6vErn
readprocessmemory, writeprocessmomoryの詳しい使い方が載ってるサイトってありますかね...
2022/05/01(日) 18:15:25.12ID:fSFndGfw
>>513
マジか
結局キャストだな
中途半端で使えない機能なんか付けんなよ
2022/05/01(日) 18:35:08.33ID:qIevfvlJ
>>538
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory
プロセスハンドルとアドレスと大きさを指示するだけで難しいことはなんもない。

ターゲットになるプロセスを見つける方法とかはたぶんこのあたりが参考になるかな……
https://docs.microsoft.com/ja-jp/windows/win32/psapi/enumerating-all-processes

公式ドキュメントは全体像が掴みづらい場合もあるけど、
この場合はたいした規模の話でもないからこれで十分でしょ。

外部のプロセスから逐一コピーして操作するのが面倒なら DLL Injection でプロセス内にプログラムを注入する方法もあるよ。
2022/05/01(日) 18:37:39.22ID:dvAJjIlE
srd::vectorも最初は誰がこんなクソコンテナ使うんだよっ
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
2022/05/01(日) 18:42:14.03ID:Rd1MW222
>>539
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
543デフォルトの名無しさん
垢版 |
2022/05/01(日) 18:48:00.04ID:ukM6vErn
>>540
ありがとうございます!試してみます!
2022/05/01(日) 18:54:08.08ID:fSFndGfw
>>542
その例を上げるのはメンバポインタがわかってない人と思う
2022/05/01(日) 19:01:02.73ID:fSFndGfw
その例は構造体の中のintを指してないから
出来ないのは当たり前
546デフォルトの名無しさん
垢版 |
2022/05/01(日) 21:50:45.69ID:t6KXJfhj
>>521
oneapi最適化性能ショボくね?
Ryzenだからかもしれんがgfortranと速度同じくらいでビビったわ。
2022/05/01(日) 22:03:23.83ID:Rd1MW222
>>544-545
だからできないって話なんだがw
548デフォルトの名無しさん
垢版 |
2022/05/02(月) 06:08:38.44ID:9K9pP+jI
struct STRUCT
{
int array[2];
};

arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
2022/05/02(月) 06:48:46.84ID:LNpTFVSP
classのメンバ関数型が存在しない理由って何?

classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
2022/05/02(月) 07:02:09.71ID:8dvAAWOX
できない話をいつまでもしてるのは脳に何か障害でもあるのか?
2022/05/02(月) 07:08:05.16ID:LNpTFVSP
理由を問うているんだけ、理解できないのか

脳に何か障害でもあるのか?
552デフォルトの名無しさん
垢版 |
2022/05/02(月) 07:36:33.49ID:9K9pP+jI
void func(void (CLASS::*pm)(), CLASS& ref)
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
2022/05/02(月) 07:56:46.72ID:LNpTFVSP
出来るできないを聞いているわけじゃない・・・
日本語理解できますか?
2022/05/02(月) 08:09:32.17ID:rW7ccw75
単純な逆参照*pmができるメンバ関数型はすべからくクロージャなるべし?
class Foo a;  // std::string Foo::someMemberFunc(int a, int b, double c)を持つ
class Bar b;  // std::string Bar::anotherMemberFunc(int a, int b, double c)を持つ

auto someMemberFunc = [=, &a](int a, int b, double c) -> std::string { return a.someMemberFunc(a, b, c); };
auto anotherMemberFunc = [=, &b](int a, int b, double c) -> std::string { return b.anotherMemnberFunc(a, b, c); };

std::function<std::string(int, int, double>* pm;
pm = &someMemberFunc;
std::cout << (*pm)(1, 2, 3.4); // a.someMemberFunc()が呼ばれる
pm = &anotherMemberFunc;
std::cout << (*pm)(5, 6, 7.8);  // b.anotherMemberFunc()が呼ばれる
std::function<std::string(int, int, double)> fn = *pm;  //  b.anotherMemberFunc()が呼ばれるためのクロージャにデリファレンスされる
2022/05/02(月) 09:03:37.01ID:8dvAAWOX
>>553
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw
2022/05/02(月) 09:06:55.61ID:6vh8Gvry
あれが「揃ってないとおかしい」と読める読解力の方に問題がありそうだが
2022/05/02(月) 10:01:16.40ID:8dvAAWOX
理由「仕様です」ということも理解できないの?
まじで脳障害を疑った方がいいぞw
2022/05/02(月) 10:12:11.24ID:Lc/e3xtf
仕様がクソすぎる
559デフォルトの名無しさん
垢版 |
2022/05/02(月) 11:03:41.58ID:/YgtvrIl
無能ワイ、メンバ関数型がなんなのかよく分からない
2022/05/02(月) 11:30:26.72ID:m3O8Sm5F
ちんちんシュッ!シュッ!シュッ!
2022/05/02(月) 11:53:48.09ID:JwCZPFEF
>>549
適切な規格化(めんどくさい)や新たな実装(めんどくさい)が必要なわりに見合う有用性が無いと考えられているからでしょう。
562デフォルトの名無しさん
垢版 |
2022/05/02(月) 12:05:29.20ID:9K9pP+jI
>>553
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?

decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか?
563デフォルトの名無しさん
垢版 |
2022/05/02(月) 12:29:35.60ID:9K9pP+jI
operator ?: がない理由も
仮にあったとして以下略への答えがないからだね
2022/05/02(月) 12:40:24.60ID:+FOPwlZG
>>559
安心しろ。俺もわからん。
2022/05/02(月) 13:38:33.63ID:WQmMvuhJ
>>547
違う話を出してきて出来ないと主張されても

>>548
メンバポインタの実体はただのアドレスのオフセットなんだから出来て良い
実際offsetofは出来る

結局制約が多過ぎてoffsetofとキャストを使うことになるなら
非常に中途半端な拡張と言わざるをえない
2022/05/02(月) 13:50:32.84ID:dhIldcoi
>>565
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。

それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
2022/05/02(月) 14:01:47.48ID:8dvAAWOX
>>565
仕様として出来ないことと実現不可能なことの区別もつかないのかよw
2022/05/02(月) 16:26:17.62ID:WQmMvuhJ
>>566
配列の要素はメンバ
ではないと
まあそんな言葉の定義はどうでもいいとして

なぜやるべきでないと思う?
出来たら何がまずい?
何が不都合?
誰もこの点にふれてない

ただ単に仕様と言われても
その仕様が糞と思うだけ
569デフォルトの名無しさん
垢版 |
2022/05/02(月) 16:53:07.08ID:9K9pP+jI
>>568
よくわからんが、こう言いたいの?
struct STRUCT
{
int array[2];
};

int STRUCT::*pm;
pm = &STRUCT::array[0];
pm = &STRUCT::array[1];
STRUCT obj;
(obj.*pm) = 1; //obj.array[1] = 1; こうなるべき
2022/05/02(月) 17:15:19.01ID:dhIldcoi
>>568
は?

> どうでもいいとして

> 誰もこの点にふれてない

触れたことを勝手に無かったことにしてるのはお前じゃん。
あほか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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