前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
探検
C++相談室 part160
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/04/15(金) 08:39:32.42ID:WMzvufu2497デフォルトの名無しさん
2022/04/29(金) 20:44:15.30ID:+Yy6lNMl 江副さんは今は何に興味あるのかしら
なんでc++やる気なくなったんだろ(´・ω・`)
なんでc++やる気なくなったんだろ(´・ω・`)
498はちみつ餃子 ◆8X2XSCHEME
2022/04/29(金) 21:36:57.56ID:1rxQCQBS >>497
今は C++ 関連ではない仕事をやっているので C++ に対して時間が取れないということと、
C++20 に追加された一部の機能 (ロケールまわり?) に懐疑的だということは江添のブログに数年前に書かれている。
彼は C++ の規格については強い関心を持っていたし解説・教育にも熱心だったが、
プログラミング自体はそんなに意欲的な感じではないんだよな。
好きにやれるポジションを失ったことでやる気をなくしたんだろう。
細かい心情の機微はわからんけどな。
今は C++ 関連ではない仕事をやっているので C++ に対して時間が取れないということと、
C++20 に追加された一部の機能 (ロケールまわり?) に懐疑的だということは江添のブログに数年前に書かれている。
彼は C++ の規格については強い関心を持っていたし解説・教育にも熱心だったが、
プログラミング自体はそんなに意欲的な感じではないんだよな。
好きにやれるポジションを失ったことでやる気をなくしたんだろう。
細かい心情の機微はわからんけどな。
499デフォルトの名無しさん
2022/04/29(金) 22:32:49.28ID:0jFDYffV てっきり素行不良が祟ってパブリックな場で出禁食らったのかと
500デフォルトの名無しさん
2022/04/29(金) 22:37:01.98ID:HFxeU7J0 ( ^ω^)もうC++の規格に熱心な人はいないんですかお?
501デフォルトの名無しさん
2022/04/29(金) 22:39:33.37ID:IgththV2 C++とは仕事の付き合いなので
それ以上に彼のことを知ろうとは思いません
それ以上に彼のことを知ろうとは思いません
502デフォルトの名無しさん
2022/04/29(金) 22:42:26.90ID:ANHZfN1C MZうyちゃーーーん♪はこっちに戻ってたのかw
503デフォルトの名無しさん
2022/04/29(金) 23:32:54.20ID:fFwxA39Q 江添なんて仕様把握だけで俺すげーしたかっただけの奴だからな。
それすら満足にできなくなっていじけてるんだろ。
それすら満足にできなくなっていじけてるんだろ。
504デフォルトの名無しさん
2022/04/29(金) 23:40:47.95ID:rnNwZVLJ プログラムの書き方的なところへの興味はどうなんじゃろうね
505はちみつ餃子 ◆8X2XSCHEME
2022/04/29(金) 23:44:21.28ID:1rxQCQBS 江添が仕事で実務的なプログラムを C++ で書いたことがあるのかはようわからんが、
少なくとも外部に発表したのは文章ばかりで、完成したアプリケーションを発表したことはほとんどない。
俺が知っているのは彼がドワンゴに入るよりもずっと前に Windows 用ソフト (というかとあるソフトのアドオン) を
公開したのを見たのが最初で最後だ。
少なくとも外部に発表したのは文章ばかりで、完成したアプリケーションを発表したことはほとんどない。
俺が知っているのは彼がドワンゴに入るよりもずっと前に Windows 用ソフト (というかとあるソフトのアドオン) を
公開したのを見たのが最初で最後だ。
506デフォルトの名無しさん
2022/04/29(金) 23:54:37.33ID:Geo4ukio 仕様ばかりに詳しくても何の役にも立たない
大抵の仕事は言語の細かな仕様まで知らなくてもC++98程度の知識でおおむねこなせるし
大抵の仕事は言語の細かな仕様まで知らなくてもC++98程度の知識でおおむねこなせるし
507デフォルトの名無しさん
2022/04/30(土) 00:06:07.15ID:X9Bb5Kqd さすがにやだよ、c++11より前のは
508はちみつ餃子 ◆8X2XSCHEME
2022/04/30(土) 00:20:09.66ID:jfGNsSDk 程度問題だわな。
俺も今の C++ は C++11 が最低ライン (もちろん可能ならもっと新しい版) だと考えている。
あまり古すぎるのはかえって学ぶのに資料が見つけにくくなっている場合もある。
俺も今の C++ は C++11 が最低ライン (もちろん可能ならもっと新しい版) だと考えている。
あまり古すぎるのはかえって学ぶのに資料が見つけにくくなっている場合もある。
509デフォルトの名無しさん
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=/*ここ*/;
//...
}
あるテンプレート関数に渡される関数ポインタ、メンバ関数ポインタ、ファンクタ、ラムダの
戻り値の型を取得する方法を教えて
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;
とでもしておけばいい
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;
とでもしておけばいい
511デフォルトの名無しさん
2022/04/30(土) 05:43:50.13ID:wKbezNiV あいかわらず、いい加減な回答だなw
それでやってみろよwwww
それでやってみろよwwww
512デフォルトの名無しさん
2022/04/30(土) 07:04:59.56ID:2aZ7UOTr 構造体中の配列の特定の要素に対するメンバポインタって何で使えないの?
struct STRUCT {
int array[4];
};
int STRUCT::*pt = &STRUCT::array[2];
こんな事をやりたい
offsetofを使えって?
struct STRUCT {
int array[4];
};
int STRUCT::*pt = &STRUCT::array[2];
こんな事をやりたい
offsetofを使えって?
513デフォルトの名無しさん
2022/04/30(土) 09:31:27.50ID:OR8SZm5l >>512
同じことを思ってる人がいるけどダメっぽい
https://stackoverflow.com/questions/674635/member-pointer-to-array-element
同じことを思ってる人がいるけどダメっぽい
https://stackoverflow.com/questions/674635/member-pointer-to-array-element
514デフォルトの名無しさん
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');
とかされていたら左詰め/右詰め/パディングが独自フォーマットとして制御し切れていない気が……
他から渡されてきた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');
とかされていたら左詰め/右詰め/パディングが独自フォーマットとして制御し切れていない気が……
515デフォルトの名無しさん
2022/04/30(土) 11:11:18.79ID:pjMZxOoQ つか実はostreamは使い終わったら、独自に使った書式指定について
cout << resetiosflags(...);
でリセットするのが作法?
cout << resetiosflags(...);
でリセットするのが作法?
516デフォルトの名無しさん
2022/04/30(土) 11:40:17.38ID:u0zlL0D0 ('_')と('0')が顔文字に見えた
517デフォルトの名無しさん
2022/04/30(土) 11:49:21.15ID:qP6dl9mx ('_')
||
| つ('0')
||
| つ('0')
518デフォルトの名無しさん
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
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
519デフォルトの名無しさん
2022/04/30(土) 12:10:48.58ID:pjMZxOoQ >>518
>left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
なるほど……
>書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
なるほど……
書式設定を記憶するだけのためにstd::iosオブジェクトを作るのかmjk、、、
>left/right は os.flags() の戻り値を std::ios_base::{left, right} でマスクして確認
なるほど……
>書式設定全体の保存・復元は一時的な ostream を作って copyfmt でやるのがいいらしいよ
なるほど……
書式設定を記憶するだけのためにstd::iosオブジェクトを作るのかmjk、、、
520デフォルトの名無しさん
2022/04/30(土) 13:59:17.37ID:M4ctbMgQ https://ideone.com/JPtQV9
VCでは通らないが、GCCでは通るコード。正しデバッグ中・・・。
ブロックソート書いたんですよ、ブロックソート。
安定ソート書けないから横着してアルゴリズムヘッダーのヤツ使ったんですよ。
落ちるんですよ。
誰かたすけて!
VCでは通らないが、GCCでは通るコード。正しデバッグ中・・・。
ブロックソート書いたんですよ、ブロックソート。
安定ソート書けないから横着してアルゴリズムヘッダーのヤツ使ったんですよ。
落ちるんですよ。
誰かたすけて!
521デフォルトの名無しさん
2022/05/01(日) 05:16:07.73ID:RKDZOMoi おまえらさぁ
openAPIがロハなのになんでいつまでもVCなんか使ってるのさ?
openAPIがロハなのになんでいつまでもVCなんか使ってるのさ?
522デフォルトの名無しさん
2022/05/01(日) 05:48:25.64ID:TlTI4EO+ 円盤でお願いします
523デフォルトの名無しさん
2022/05/01(日) 07:28:35.35ID:cO13JXSW >>520
31行目で A = B = DD; しないで return してしまってるけどいいの?
31行目で A = B = DD; しないで return してしまってるけどいいの?
524デフォルトの名無しさん
2022/05/01(日) 09:52:18.27ID:nBd2wfSC525デフォルトの名無しさん
2022/05/01(日) 14:31:24.77ID:ukM6vErn あるプロセスで、変数の型とアドレスはわかってるものとして、
それをc++のプログラムから書き換えるにはどうすればいいんですかね?
調べても情報があまり出てこなくて...
それをc++のプログラムから書き換えるにはどうすればいいんですかね?
調べても情報があまり出てこなくて...
526デフォルトの名無しさん
2022/05/01(日) 14:43:19.26ID:9TCpWNNH527デフォルトの名無しさん
2022/05/01(日) 14:53:21.11ID:vJsN8meg こんなんでいいんじゃね
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
528デフォルトの名無しさん
2022/05/01(日) 14:55:46.12ID:t4/NhzPt 他のプロセスからってことじゃないの
WindowsならReadProcessMemory/WriteProcessMemory
WindowsならReadProcessMemory/WriteProcessMemory
529デフォルトの名無しさん
2022/05/01(日) 14:56:17.49ID:KjQtFKQ9 アドレスがわかってると言いながら実は空間が違うとか。
530デフォルトの名無しさん
2022/05/01(日) 14:58:07.61ID:ukM6vErn すみません、説明不足でした。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
531デフォルトの名無しさん
2022/05/01(日) 15:03:02.21ID:9TCpWNNH linux的にはptraceを調べるとか…
532デフォルトの名無しさん
2022/05/01(日) 15:07:04.74ID:t4/NhzPt リバースエンジニアリングでしょ
環境依存だしここで有益な答えが返ってくるとは思えない
環境依存だしここで有益な答えが返ってくるとは思えない
533デフォルトの名無しさん
2022/05/01(日) 15:07:49.80ID:k85aGXIq 実行時に書き換えるならば排他制御が必須
534デフォルトの名無しさん
2022/05/01(日) 15:11:01.84ID:Z9kcLIQb スタック変数やヒープ変数を実行前に書き換えるのは不可能
535デフォルトの名無しさん
2022/05/01(日) 15:13:35.34ID:ukM6vErn 皆さんありがとうございます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
536デフォルトの名無しさん
2022/05/01(日) 15:47:36.66ID:V8gMjhaX >>534
プロセスって言ってんだから実行中の話だろうjk
プロセスって言ってんだから実行中の話だろうjk
537デフォルトの名無しさん
2022/05/01(日) 16:19:28.57ID:pvwx8N/t >>521
oneapi でなく openapi というのがあるの?
oneapi でなく openapi というのがあるの?
538デフォルトの名無しさん
2022/05/01(日) 16:52:28.16ID:ukM6vErn readprocessmemory, writeprocessmomoryの詳しい使い方が載ってるサイトってありますかね...
539デフォルトの名無しさん
2022/05/01(日) 18:15:25.12ID:fSFndGfw540はちみつ餃子 ◆8X2XSCHEME
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 でプロセス内にプログラムを注入する方法もあるよ。
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 でプロセス内にプログラムを注入する方法もあるよ。
541デフォルトの名無しさん
2022/05/01(日) 18:37:39.22ID:dvAJjIlE srd::vectorも最初は誰がこんなクソコンテナ使うんだよっ
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
542デフォルトの名無しさん
2022/05/01(日) 18:42:14.03ID:Rd1MW222 >>539
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
543デフォルトの名無しさん
2022/05/01(日) 18:48:00.04ID:ukM6vErn >>540
ありがとうございます!試してみます!
ありがとうございます!試してみます!
544デフォルトの名無しさん
2022/05/01(日) 18:54:08.08ID:fSFndGfw >>542
その例を上げるのはメンバポインタがわかってない人と思う
その例を上げるのはメンバポインタがわかってない人と思う
545デフォルトの名無しさん
2022/05/01(日) 19:01:02.73ID:fSFndGfw その例は構造体の中のintを指してないから
出来ないのは当たり前
出来ないのは当たり前
546デフォルトの名無しさん
2022/05/01(日) 21:50:45.69ID:t6KXJfhj547デフォルトの名無しさん
2022/05/01(日) 22:03:23.83ID:Rd1MW222 >>544-545
だからできないって話なんだがw
だからできないって話なんだがw
548デフォルトの名無しさん
2022/05/02(月) 06:08:38.44ID:9K9pP+jI struct STRUCT
{
int array[2];
};
arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
{
int array[2];
};
arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
549デフォルトの名無しさん
2022/05/02(月) 06:48:46.84ID:LNpTFVSP classのメンバ関数型が存在しない理由って何?
classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
550デフォルトの名無しさん
2022/05/02(月) 07:02:09.71ID:8dvAAWOX できない話をいつまでもしてるのは脳に何か障害でもあるのか?
551デフォルトの名無しさん
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のはずだが現実にはできない
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
553デフォルトの名無しさん
2022/05/02(月) 07:56:46.72ID:LNpTFVSP 出来るできないを聞いているわけじゃない・・・
日本語理解できますか?
日本語理解できますか?
554デフォルトの名無しさん
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()が呼ばれるためのクロージャにデリファレンスされる
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()が呼ばれるためのクロージャにデリファレンスされる
555デフォルトの名無しさん
2022/05/02(月) 09:03:37.01ID:8dvAAWOX >>553
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw
556デフォルトの名無しさん
2022/05/02(月) 09:06:55.61ID:6vh8Gvry あれが「揃ってないとおかしい」と読める読解力の方に問題がありそうだが
557デフォルトの名無しさん
2022/05/02(月) 10:01:16.40ID:8dvAAWOX 理由「仕様です」ということも理解できないの?
まじで脳障害を疑った方がいいぞw
まじで脳障害を疑った方がいいぞw
558デフォルトの名無しさん
2022/05/02(月) 10:12:11.24ID:Lc/e3xtf 仕様がクソすぎる
559デフォルトの名無しさん
2022/05/02(月) 11:03:41.58ID:/YgtvrIl 無能ワイ、メンバ関数型がなんなのかよく分からない
560デフォルトの名無しさん
2022/05/02(月) 11:30:26.72ID:m3O8Sm5F ちんちんシュッ!シュッ!シュッ!
561デフォルトの名無しさん
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();になればいいのか?
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?
decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか?
563デフォルトの名無しさん
2022/05/02(月) 12:29:35.60ID:9K9pP+jI operator ?: がない理由も
仮にあったとして以下略への答えがないからだね
仮にあったとして以下略への答えがないからだね
564デフォルトの名無しさん
2022/05/02(月) 12:40:24.60ID:+FOPwlZG >>559
安心しろ。俺もわからん。
安心しろ。俺もわからん。
565デフォルトの名無しさん
2022/05/02(月) 13:38:33.63ID:WQmMvuhJ566はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 13:50:32.84ID:dhIldcoi >>565
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。
それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。
それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
567デフォルトの名無しさん
2022/05/02(月) 14:01:47.48ID:8dvAAWOX >>565
仕様として出来ないことと実現不可能なことの区別もつかないのかよw
仕様として出来ないことと実現不可能なことの区別もつかないのかよw
568デフォルトの名無しさん
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; こうなるべき
よくわからんが、こう言いたいの?
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; こうなるべき
570はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 17:15:19.01ID:dhIldcoi571デフォルトの名無しさん
2022/05/02(月) 17:32:38.90ID:9K9pP+jI572デフォルトの名無しさん
2022/05/02(月) 17:34:25.32ID:JwCZPFEF >>570
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。
573はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 17:56:52.90ID:dhIldcoi >>572
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。
つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。
つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。
574デフォルトの名無しさん
2022/05/02(月) 18:01:04.13ID:+FOPwlZG なんとなくわかったけど、
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
575デフォルトの名無しさん
2022/05/02(月) 18:06:02.86ID:+FOPwlZG576デフォルトの名無しさん
2022/05/02(月) 18:23:20.44ID:WQmMvuhJ >>570
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから
そうじゃなくて
技術的な話をしたいわけで
以下なら&S::a1と出来る
これで実質&S::a[1]になる
struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};
こんな事をやらないと出来ないのはなぜか?
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから
そうじゃなくて
技術的な話をしたいわけで
以下なら&S::a1と出来る
これで実質&S::a[1]になる
struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};
こんな事をやらないと出来ないのはなぜか?
577デフォルトの名無しさん
2022/05/02(月) 18:27:19.33ID:WQmMvuhJ579デフォルトの名無しさん
2022/05/02(月) 18:40:58.17ID:HZ9CcBZq おじいさんみたいな改行と文体
580デフォルトの名無しさん
2022/05/02(月) 18:45:56.08ID:JwCZPFEF >>578
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。
なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。
>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。
なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。
>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。
581デフォルトの名無しさん
2022/05/02(月) 18:53:30.65ID:WQmMvuhJ 配列にも入れ子の構造体にも使えない
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
582デフォルトの名無しさん
2022/05/02(月) 19:03:28.83ID:JwCZPFEF >>581
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。
現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。
現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。
583デフォルトの名無しさん
2022/05/02(月) 20:14:09.92ID:pVfL1f+B ninja使わないで普通にmakeするとものすごく遅いな。
ninjaって凄く速かったんだな。
ninjaって凄く速かったんだな。
584デフォルトの名無しさん
2022/05/02(月) 20:49:04.97ID:/YgtvrIl 純粋な疑問なんだけどメンバ変数である配列の要素のポインタを変数として扱えて何が嬉しいの?
使い方が思い浮かばない…
使い方が思い浮かばない…
585はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 20:59:32.26ID:dhIldcoi そもそもメンバを指すポインタだってそんなに使うもんじゃないしな。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
586デフォルトの名無しさん
2022/05/03(火) 10:38:15.40ID:J5PtY6cN587デフォルトの名無しさん
2022/05/03(火) 10:41:06.53ID:J5PtY6cN 構造体STRUCTのメンバを指すメンバポインタというものが
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
588デフォルトの名無しさん
2022/05/03(火) 12:03:52.41ID:uzYP/aDa エラーログかとおもた
Amnesty International USA
https://twitter.com/amnestyusa/status/1521295013044539392
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
https://twitter.com/5chan_nel (5ch newer account)
Amnesty International USA
https://twitter.com/amnestyusa/status/1521295013044539392
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
https://twitter.com/5chan_nel (5ch newer account)
589デフォルトの名無しさん
2022/05/03(火) 18:51:24.96ID:TQMg8rzt >>587
最後の止め乙
最後の止め乙
590デフォルトの名無しさん
2022/05/03(火) 22:24:19.43ID:J5PtY6cN ついでに漏れもお馬鹿質問したいのですが
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース
// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない
// (2)
extern "C" void foo(void);
static void foo(void) { .. } // NG(?): コンパイラに怒られそう
// (3)
namespace {
extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}
// (4)
extern "C" {
static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース
// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない
// (2)
extern "C" void foo(void);
static void foo(void) { .. } // NG(?): コンパイラに怒られそう
// (3)
namespace {
extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}
// (4)
extern "C" {
static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
591デフォルトの名無しさん
2022/05/03(火) 22:26:06.85ID:J5PtY6cN やっぱ拡張子を ".c" にしてstatic void foo(void) { ... }するしかなさげ?
592デフォルトの名無しさん
2022/05/03(火) 22:39:49.52ID:k6J/qudN > ファイルスコープの関数をextern "C"する
一行で矛盾しているが
一行で矛盾しているが
593デフォルトの名無しさん
2022/05/03(火) 22:40:29.61ID:EqZaa2d1 atexitが求めているのは関数ポインタだけなのでextern "C" はそもそも必要ない
extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い
namespaceとの相互作用は知らん
extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い
namespaceとの相互作用は知らん
594デフォルトの名無しさん
2022/05/03(火) 23:03:04.80ID:J5PtY6cN >>593
た確かに…!
VCだとC++リンケージの関数でも問題無く登録できてイゴイタ
ここの記述に引きずられてしまった↓
https://www.ibm.com/docs/ja/zos/2.2.0?topic=functions-atexit-register-program-termination-function
C および C++ のリンケージ規約は非互換の ため、atexit() は C++ 関数ポインターを受け取ることができない。
C++ 関数ポインターを atexit() へ渡そうとすると、コンパイラーが エラーとしてこれにフラグを付けることになる。
C++ atexit() 関数を使用するには、atexit() に登録されたすべての 関数を extern “C” として宣言することに より、
これらの関数が C リンケージを必ず持つようにしなければならない。
た確かに…!
VCだとC++リンケージの関数でも問題無く登録できてイゴイタ
ここの記述に引きずられてしまった↓
https://www.ibm.com/docs/ja/zos/2.2.0?topic=functions-atexit-register-program-termination-function
C および C++ のリンケージ規約は非互換の ため、atexit() は C++ 関数ポインターを受け取ることができない。
C++ 関数ポインターを atexit() へ渡そうとすると、コンパイラーが エラーとしてこれにフラグを付けることになる。
C++ atexit() 関数を使用するには、atexit() に登録されたすべての 関数を extern “C” として宣言することに より、
これらの関数が C リンケージを必ず持つようにしなければならない。
595デフォルトの名無しさん
2022/05/03(火) 23:16:58.67ID:LdVfvoP5 >>594
なんだそれは...IBMコンパイラ特有の制限か?
Linuxでもそんな制限はないし
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/atexit.3.html
なんだそれは...IBMコンパイラ特有の制限か?
Linuxでもそんな制限はないし
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/atexit.3.html
596デフォルトの名無しさん
2022/05/04(水) 06:21:09.19ID:TqagpjaD 9.11 Linkage Specification
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- NY円、一時1ユーロ=180円台まで下落…1999年のユーロ導入以来初 ★2 [蚤の市★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- 【悲報】なんで「アジア主義」を唱える右翼が居ないの🤔 [616817505]
- 野田(安倍晋三マニア)「総理は国益を損なうような発言はしてはいけない」 [884040186]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 【高市悲報】片山さつき、円安進行を受けコメント「為替の変動を緊張感を持って見極める」 [888298477]
