[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/27 11:38 / Filesize : 256 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part154



1 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 17:54:00.55 ID:0DW9z0rL.net]
※前スレ
C++相談室 part153
https://mevius.5ch.net/test/read.cgi/tech/1602339500/

テンプレここまで

830 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 20:07:12.76 ID:F92hI73d.net]
>>809
Fooはこんなやつ、
https://ideone.com/mPPH8I

IFooは、C++ではよく考えたらIFooのオブジェクトを直接生成できないので(>>802の仰せの通り
std::shared_ptr<IFoo>とかで生成することを考えたのだがエラーになるorz
(上のリンク先のコードでコメントアウトしてあるgenerate_IFoo()
思いのほか闇が深かった\(^o^)/

std::shared_ptr<IFoo>が生成できた暁には、
std::shared_ptr<IFoo> pがリソースの所有権を握ったFooを保持しているとき、
std::shared_ptr<IFoo> qというのがいるとして、
 *q = *p
で所有権を*pから*qに渡したり、
 return *p
で呼び出し元が所有権を有するFooを受け取れるようにしたいワケ

831 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 20:09:12.28 ID:F92hI73d.net]
ちなみにWandboxでソースコードをフォークする方法は
初心者なので
わかり
ません

832 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 20:14:47.49 ID:LxNhpnKU.net]
generate_Foo()がコケてるのはnewのところでFooのコピコンがないだけだろ
コピコン書くか、ムーコン使いたいならnew Foo(std::move(foo3))にすればいいだけ

後半も意味不明
*q = *pってそれスライシングだぞ

833 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 20:23:47.49 ID:F92hI73d.net]
>>817
普通の(ムーブでない)コピコンは書けないなぜなら>>806の理由により

>*q = *pってそれスライシングだぞ
どゆこと?
Foo foo1とFoo foo2だと
foo1 = foo2
とできるのに、

834 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 20:26:48.03 ID:F92hI73d.net]
ちょっと補足すると、IFooには現状代入手段が無いから、
*q = *pはそもそもコンパイルが通ることはなく、目的とする機能を形而上的に表す仮想コード
のつもり

835 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 21:03:58.63 ID:+My/Unlg.net]
>>814
処理を意味でまとめるようなことなら積極的にやるべきだと思いますが、それは関数オブジェクトじゃなくて関数でもできますよね?

836 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 21:05:03.53 ID:HYHVDYIS.net]
>>815
コピー代入演算子とムーブコンストラクタだけ定義するとか意味分からんし
インターフェースによる隠蔽より先にそっち解決しなさい
何がしたいのか自分で本当にわかってる?

837 名前: mailto:sage [2021/02/21(日) 21:07:32.53 ID:3Ebck9FU.net]
>>820
まあ、そのとおりであり、そうなんですよね…
>>814 は関数オブジェクトである必然性はありません、関数オブジェクトを積極的に使う例としては STL にご登場願うしかないのかもしれませんね

838 名前:デフォルトの名無しさん mailto:sage [2021/02/21(日) 22:29:56.45 ID:LxNhpnKU.net]
>>818
shared_ptrは関係ないから普通のポインタで話するぞ(同じ事だ)
IFoo* p = new Foo();
IFoo* q = new Foo();
というのがあったとして*q = *p;ってのは何だと思う?
pとqはIFoo*型だ
だからもちろん*pと*qというのはIFoo型だ
すなわち*q = *p;というのはIFoo::operator=(const Foo&)の呼び出しだ
operator=()はvirtualにできないから、pとqが本当はFoo型オブジェクトを指してることなんか知りもしないし考慮もしない
よってIFoo部分の代入だけが行われて、要はqのIFoo部分だけが首チョンパされてpのIFoo部分が代入される
これをスライシングという



839 名前:はちみつ餃子 mailto:sage [2021/02/21(日) 23:00:12.09 ID:jd0qgVVy.net]
>>822
関数オブジェクトに「関数」とついているのは関数と同じ記法で呼び出せるということに意味があって、インターフェイスの問題。
状態を持った関数 (関数オブジェクト) も状態を持たない関数 (関数ポインタ) も統一的に扱えたらうれしいねって話なので、
状態を持たず、高階関数に渡すこともない場合は関数オブジェクトにする意味はないな。
(普通の関数も static 変数への参照を持ってたりする場合もあるので必ずしも状態を持たないわけではないけど。)

840 名前: mailto:sage [2021/02/21(日) 23:42:46.53 ID:3Ebck9FU.net]
>>824,820,(>>813,814,822)
結局、どーでもいい一発芸で、ああ動くね‥‥、と思ったまま放置してましたね<関数オブジェクト
https://mevius.5ch.net/test/read.cgi/tech/1434079972/21
https://ideone.com/9KIuSD
あとはラムダ式の理解のための存在という認識、か

841 名前:はちみつ餃子 mailto:sage [2021/02/22(月) 00:10:55.10 ID:oiAqsUn6.net]
「ラムダ式が関数オブジェクト (型の定義と生成) の構文糖」というのは
既存のプログラムとの整合性を壊さない上手いアイデアだと思うけど、
しばらくしたら「関数オブジェクトはラムダ式の実体」という説明のほうが
通りがよくなったりするかもしれないね。

842 名前:デフォルトの名無しさん [2021/02/22(月) 04:39:33.19 ID:7qATnC1I.net]
関数オブジェクトで状態を渡せるのは結構なんだが、コピーコンストラクタ渡しなので、
手の込んだ状態管理だった場合は結局、C言語と同じ

843 名前:ュユーザー定義変数を介して状態を読み書きすることになる。 []
[ここ壊れてます]

844 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 08:23:10.03 ID:Dz0hZ3aS.net]
>>827
shared_ptr使えば、大抵の場合は問題ないんじゃない?

845 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 09:54:32.23 ID:Y0MZ31oO.net]
>>807,820ですけどQZで始まる人あまりにもレベル低いというか回答者として不適格だと思うのでNGします

846 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 10:22:59.45 ID:1euWwsnd.net]
>>829
答えてもらってる立場で偉そうに。常識ないの?

847 名前:デフォルトの名無しさん [2021/02/22(月) 11:11:29.17 ID:M+ptXBNl.net]
いやでも実際・・・QZはね・・・
50過ぎのおっさんが無理して絡みにいってるけど空回りしてる感じなんだよね
ほんと残念だけども

848 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 11:36:36.23 ID:7qATnC1I.net]
関数オブジェクトに対するラムダ式の優位性は、ローカル変数を比較的安全かつ手軽に参照渡しできることだろう。



849 名前:デフォルトの名無しさん [2021/02/22(月) 12:08:03.12 ID:5Ezd+ZoO.net]
あわしろ氏がQzはアカン言うてたけど、ターゲット変えたのかな?

急にその手の書き込みが増えてあからさますぎる。

850 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 16:15:54.50 ID:rpJl6SNk.net]
>>831
QZの回答は糞だとして、回答者に対して>>829みたいな態度をとることがどう正当化されるわけ?

851 名前:デフォルトの名無しさん [2021/02/22(月) 17:04:18.35 ID:M+ptXBNl.net]
回答者には無条件で感謝しないといかんのか?
気持ち悪いな

852 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 17:39:33.90 ID:rpJl6SNk.net]
>>835
感謝しろなんて言ってないぞアホ

853 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 19:14:24.66 ID:SaDkzfTf.net]
>>835
回答を得るのに適切な行動を取りゃいいよ。
変にヘイトを吐くとつっかかる奴がいるから回答から遠くなる。
>>829は感情を制御する訓練をしないとな。

854 名前:デフォルトの名無しさん [2021/02/22(月) 19:28:11.36 ID:M+ptXBNl.net]
たしかに
勝手にNGしとけば十分で煽るように宣言するは意味はまったくないね
擁護した俺が悪かったごめん

855 名前: mailto:sage [2021/02/22(月) 19:57:55.16 ID:R3R68rti.net]
>>831
認めましょう

>>838
私の意見に一番近いですね
私は、馬鹿な私の意見を見たくない人も多いと想定しており、馬鹿な私が発言するときは馬鹿の印としてトリップをつけるようにしています、それだけは確約しますので、後は好きなように NG に入れていただいて結構ですよ
私はそういう人に干渉するつもりはありません

856 名前:デフォルトの名無しさん [2021/02/22(月) 20:02:59.96 ID:5Ezd+ZoO.net]
そういう書き込みを見ると、あわしろ氏よりQzのほうが大人に見えるなあ。
まあでも、あわしろ氏には技術評論社がついてるからね。
謝っといたほうが良いんじゃないの?

857 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 20:52:21.84 ID:jfkpe4Eh.net]
>>834
俺も以前質問したら、明らかに見当違いなマウント取りたいだけの回答が来て、言い返した時
君みたいな事言われたよ
回答くれるのは有難いが・・・ねぇ。
まぁそういうのはスルーしろ、ってんならまだわかるけど

ちなまともな回答くれた人には礼言ってるからね

858 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 21:08:29.88 ID:51epSMYu.net]
知らんがな。キミの意見だけ聞いてその時どっちに問題があったかどうやって判断すればいいんだよ



859 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 21:18:11.70 ID:jfkpe4Eh.net]
そういう話じゃねーよ

860 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 00:38:10.30 ID:6MWC7t1x.net]
あるクラスのメソッドを他所で借りたいというか使いたいときって移譲(インスタンス化)するかコピペするしかないの?

861 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 00:41:49.01 ID:Z5ZYenTn.net]
>>844
メソッドをクラスから分離してテンプレート関数にすれば、クラスの継承関係がなくても使えるので便利。

862 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 01:01:30.38 ID:48JMuLBY.net]
>>844
メンバアクセスしていないならstatic関数にしてクラス名::メソッド名()で呼べる
ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど

あと継承する手もあるけど「借りたいから」程度の理由で場当たり的にやると確実に泥沼化する

863 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 04:11:59.35 ID:kBU50DXM.net]
>>846
> ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど
極論、引数をとって返り値を返す関数だけで全てのことが実現できますよね?
そう思ったらクラスのメソッドにするよりも何でもクラス外の関数にする方がお得というか楽な気がしてしまいます

864 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 07:21:43.52 ID:7kgSemXY.net]
そのとおりで極力フリー関数にするべき
(非静的)メンバ関数というのはデータメンバーの一貫性を保つためだけに使うもんだよ

865 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 07:27:00.90 ID:ex5XjLGm.net]
>>847
"メンバアクセスしてない"てのが重要だと思うよ
実際、非staticではなくstaticなメンバ関数にしたい場面てあんまり無い(外の関数と大して変わらんから)

>>848みたいなのはオブジェクト指向も理解出来てないド素人が玄人ぶってよく言うんだよなぁ・・一応釘だけ刺しとく

866 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 08:19:26.69 ID:kBU50DXM.net]
なんかOOPの行き着く先みたいな話してるな

俺も関数が引数と返り値としてメッセージを渡し合って協働していく方が洗練されてると思う
必然、その方が副作用も少ない

867 名前:デフォルトの名無しさん [2021/02/23(火) 08:29:56.96 ID:Z5ZYenTn.net]
staticなメンバ関数には、名前衝突しにくい、msvcのインテリセンスのような入力支援を得やすい、という恩恵はある。

868 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 08:30:00.72 ID:u3MMsI1X.net]
メッセージ・・?
何の言語の話してんだ



869 名前:デフォルトの名無しさん [2021/02/23(火) 09:47:50.72 ID:DwnxTU4/.net]
オブジェクト指向の概念の話をするときにメッセージって言葉使いませんか?
C++ならメッセージ=メンバ関数
Javaならメッセージ=メソッド
言語によって呼び方が違うから概念的な話のときはメッセージといったほうが通りがよい

870 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:07:32.09 ID:B3ih21Pc.net]
>>849
「オブジェクト指向も理解出来てないド素人が玄人ぶってよく言う」
の意味がさっぱりわからん
>>848の表現に一切ケチつけられる要素ないと思うけど

871 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:15:54.38 ID:gTQJYaBt.net]
> データメンバーの一貫性を保つためだけに使う

いったい何が言いたいんだろう
他人に分かり易く言えないのは自分が解ってないからというケースがある

872 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:18:06.26 ID:B3ih21Pc.net]
> データメンバーの一貫性を保つためだけに使う

この表現で普通に分かるけど
分からん人もいるのね了解

873 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:20:33.46 ID:NIjAanwq.net]
メッセージが何のことかわからないのはワロス

874 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:21:51.05 ID:gTQJYaBt.net]
>>856
でか口は具体的に説明できてからぬかせ
このハッタリ野郎

875 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:22:34.65 ID:7kgSemXY.net]
データメンバに対して想定した扱い方だけをさせるようにして予期しない状態の発生を防ぐため、って言えばお気に召したかしら
普通はそれを短く「一貫性を保つ」って言うのだけど

876 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:31:05.01 ID:u3MMsI1X.net]
>>853
使わない、というか使うな誤解を招くから
SmalltalkとかObjective-Cならわかるけど
C++やJavaのそれはメッセージングではないと考えるのが普通(そう見做せないわけではないが

877 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:33:09.34 ID:B3ih21Pc.net]
>>858


878 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:34:51.99 ID:gTQJYaBt.net]
>>859
1行目は納得
2行目の主観論には付き合ってらんね



879 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:37:31.33 ID:B3ih21Pc.net]
>>860さんに同意で
C++やJava界隈だと明確に避けてると見てる
メッセージってのは

880 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 10:49:29.89 ID:7kgSemXY.net]
ごめんねおじいちゃん知らない表現を使われただけでそんなに拗ねるなんて思わなかったんだ

881 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 11:07:54.70 ID:u3MMsI1X.net]
いや、悪いけど>>859を以って
>データメンバーの一貫性を保つためだけに使うもんだよ
などと言い切れるのは経験不足と見られても仕方ないと思うよ学生ちゃん

882 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 11:13:43.78 ID:j4L8+y6t.net]
おじいちゃんとか学生ちゃんとか、おまえらマウンティングしながらじゃないと会話できないのかw

883 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 11:54:07.11 ID:oVEFpcof.net]
このスレは特にそういうの多いよね

884 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 12:46:58.74 ID:HLi0yp23.net]
昔からこのスレは特に酷いよね
なぜマウントの必要があるのかは少しだけ興味深いけど

885 名前:デフォルトの名無しさん [2021/02/23(火) 13:21:23.20 ID:+0nZ2NLW.net]
Linuxを使う以上、C++を嫌わないとダメだろ。

886 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 13:45:38.11 ID:iu17pC6m.net]
>>857,864
いや、メッセージはわかってるけどなんでC++スレで?
って話だろ
>>860の言うようにC++界隈ではあまり使わんし
単にイキってるだけにしか見えんw

887 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 13:46:51.42 ID:iu17pC6m.net]
>>865
どういう理由で経験不足と判断したか言ってみ

888 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 13:47:30.93 ID:alqL+AST.net]
オブジェクト指向に関しては、今の人は、昔はメモリが高価だったとでも思っておけば良いよ。



889 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 13:53:26.39 ID:UMWafFvJ.net]
>>823
レスdクス大儀であった
自己解決しますた、
https://ideone.com/k76kj5

890 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 13:59:21.85 ID:UMWafFvJ.net]
一貫性というのはオブジェクト内部の整合性のこ
とを言いたい
のでは…
※ 個人の感想です

891 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 14:03:58.66 ID:UMWafFvJ.net]
C++のメソッドの呼び出しをメッセージと言い出すとウィンドウメッセージと紛らわしい(小並感
ていうかC++においてメッセージと言えるのはメソッドの「呼び出し」であってメソッドそのものではない
(例えば)メッセージ自体は継承メカニズムとは独立の概念なのだから
※ 個人の感想です

892 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 14:10:51.07 ID:HLi0yp23.net]
Smalltalkはほぼ知らんけど
メッセージ式ってのは
セレクタ+引数のことだったはず
いやこれどうでもいいか

893 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 14:18:47.72 ID:UMWafFvJ.net]
ていうか今にして思えばstd::shared_ptr<IFoo>がIFooのインスタンスに対する所有権を適切に移譲したり管理するので
std::shared_ptr<T>に持たせることにした時点でIFoo自体がリソースに対する所有権を管理する必要はなさげorz

894 名前:デフォルトの名無しさん [2021/02/23(火) 14:29:34.84 ID:+0nZ2NLW.net]
smalltalkなんて誰も使わないのだから、アジソンウェスレイのオブジェクト指向プログラミング入門にそう書かれていたからという理解で良いのでは?

若者もいるので説明しておくと、書店で書籍を買う時代があって、書店に並ばなければ書籍の存在自体わからなかったのですよ。
この本は何処の書店にも並んでいたので、スレの高齢者全員が読んでいます。
この本しかなかったんですよ。
良い本だとは思いませんが、30年たった今でも古書に値が付くはずです。

全員が読んでるので、全員が知っているかのように錯覚する人もいるって事です。

895 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 16:09:16.56 ID:CS53pw6I.net]
C++のオブジェクト指向でメッセージングのワード出してくるのは
継承を説明するサンプルコードで動物の階層もちだしてくるのと同じ功罪がある
理解のとっかかりにはいいが、リアルな実装の段階ではそういうポエムみたいな話は忘れたほうがいい

896 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 16:11:25.59 ID:feF5fzNV.net]
メッセージ(笑)とか頭おかしい奴が言いそう

897 名前:デフォルトの名無しさん [2021/02/23(火) 16:16:12.25 ID:+0nZ2NLW.net]
>>879
功もあると御自分で書かれているのでは?

898 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 19:10:57.35 ID:48JMuLBY.net]
>>873
これで本当にいいのか?
コピー代入演算子でムーブさせるのが本当にあなたのやりたかったこと?
std::auto_ptrはこの問題があったからdeprecatedになったんだけど



899 名前: mailto:sage [2021/02/23(火) 21:53:45.68 ID:tPF8d5Rx.net]
>>878
>書店で書籍を買う時代があって、書店に並ばなければ書籍の存在自体わからなかったのですよ。

私の若い頃を思い出します。
当時、神戸の一番大きな本屋さんでは、どうしたわけだかコンピューター関連書籍の部分だけは黒山の人だかりで、いつも二十人くらいがみんな立ち読みしまくっていて、そういう人ごみを押しのけて本を探さなければならなかったくらいでした
最近右翼になった数学者・藤原正彦氏によれば、もっと古い時代には町の小さな本屋さんであっても普通にそんな状態だった、ときいています、とても信じられませんが‥‥

そういうわけで、アマゾン・ウェルカム!

900 名前: mailto:sage [2021/02/23(火) 21:57:00.55 ID:tPF8d5Rx.net]
>>875
私は例のペゾルド教本を何とか C++ に適応させたくて、ペゾルド本の WM 処理・巨大 switch 文を C++ に適合させようと未だに四苦八苦していますが、やっぱり MFC に移っちゃったほうが楽チンなんでしょうか?

901 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:05:53.75 ID:u3MMsI1X.net]
>>871
あまりに一面的な見方やろ
>>848はカプセル化も多態も、上で話してた関数オブジェクトさえ否定する暴論
よほど拒否反応があるんだろうなー、と

902 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:07:42.70 ID:HLi0yp23.net]
否定したように見えちゃってるんだな
いろんな人がおるな

903 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:15:00.14 ID:iu17pC6m.net]
>>885
まあ
> (非静的)メンバ関数というのはデータメンバーの一貫性を保つため「だけ」に使うもんだよ
の「だけ」に引っかかってると思うんだけどそっちの方がどちらかと言うと暴論に見えるよ

904 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:20:52.65 ID:u3MMsI1X.net]
まぁ関数オブジェクトはある意味当てはまってるかもしれんと思うが
>>887
そっちも根拠書いてね

905 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:28:42.45 ID:iu17pC6m.net]
>>888
>>886が言うように「否定」はしてないと思うよ
ってことね

906 名前:デフォルトの名無しさん [2021/02/23(火) 22:44:54.86 ID:H7IAWcv9.net]
[selector message]

Objective-Cが良かったな。

907 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 06:48:21.60 ID:Vo6CI9FQ.net]
>>884
やってみるとわかるけど、MFCと同じものを自分で作ってる感じになるね
ARM C++時代に作るとああなるんだけど、
今どきのC++20で作るとどうなるのかは興味深い

908 名前:はちみつ餃子 mailto:sage [2021/02/24(水) 15:54:28.46 ID:EZ8EgbLC.net]
現代的な Windows のフレームワークとしては C++/WinRT に力が入ってるみたいなんで、
今からはこれを使った方がよさげ



909 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 17:47:00.67 ID:T43vsud+.net]
P/Invokeともこれでおさらば、
と言いたいところだがネイティブC++をwrapするC++/WinRT自体はCLR上の言語なんじゃなかったっけ…
違ったっけ…

910 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 20:59:30.49 ID:T43vsud+.net]
C++/CXと混同すた、orz

911 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 00:40:25.02 ID:hxonNlh3.net]
C++/CLIだよ(小声

912 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 12:27:48.18 ID:Kp+Bp4Dl.net]
int (int)型のコールバック関数ポインタにて、一応呼ばれるのでnullはマズイけど不要なので空にしたいという場合に
int () { return 0; }という引数が一致しない空関数へのポインタを渡すとまずい事になるんでしょうか?
低レベルの知識がないのでよく分からないんですが、スタックの巻き戻しとかでズレが生じるとかありそうな気がしています

913 名前:はちみつ餃子 mailto:sage [2021/02/25(木) 14:45:58.57 ID:ziL/azOs.net]
>>896
使われている ABI による。
x64 環境なら Unix (系の多くの OS) でも Windows でも引数は整数4個分までは
レジスタで渡されるんで、スタックの整合性は壊れないはず。

914 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 15:12:23.79 ID:bxBNuN1v.net]
>>896
スタックは呼ぶ側で処理するからズレないよ
でないと可変長引数とか実現できないし

>>897
そんなもんは処理系やオプション次第

915 名前:デフォルトの名無しさん [2021/02/25(木) 15:36:41.54 ID:SLTnVXDN.net]
静的解析ツールやコード分析で警告が出るだろうから直したほうがいいと思うけどね

916 名前:はちみつ餃子 mailto:sage [2021/02/25(木) 15:44:39.43 ID:ziL/azOs.net]
x64 の一般的な ABI ではもう様々な呼出し規約を使い分けないようになってる。
(cdecl と stdcall が混在していた Windows が例外的で
他は 32bit 時代からかなり統一されていたみたいだけど。)

まあそれはともかくとして、
実際には不要でも適当な値が渡るようにして型を併せるほうが良いとは思う。
不整合を残しておくと強い最適化をかけたときにわけのわからないことになりがち。

917 名前:デフォルトの名無しさん [2021/02/25(木) 16:08:57.78 ID:0Aa2beUH.net]
はちみつは見所がある弟子にしてやっても良いと、あわしろ氏が褒めてた。

918 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 16:57:46.00 ID:2x/2jVQO.net]
>>896
古いCから新しいC++まで含め、素朴な観点では原則的には大丈夫では有るが、
あなたが言っているように例外処理が入ってくるとどうなるかは不明。
C/C++では型を厳しくしているのは、そういうことを避けるため。
あなたのやろうとしていることは、関数アドレスをキャストしなくては
関数ポインタへの代入できない。
このようにキャストすることによって、アーキテクチャ依存となり、不具合が起きる
確率が0でなくなる。



919 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 17:00:32.01 ID:2x/2jVQO.net]
>>902
[補足]
例外処理はとても複雑なことが行なわれることがある。
関数ポインタに代入する際に関数シグネチャが異なるものをキャストして入れると
どうなるかは処理系依存となる。
関数アドレスを同じビット数の整数型の変数との間で相互にキャストするのは構わない。
関数なのに、異なるシグネチャのものを代入しあうのは問題。

920 名前: mailto:sage [2021/02/25(木) 19:04:36.48 ID:FipxGJhu.net]
>>891
そうですか‥‥
いまどき MFC の教科書が存在するかどうかは疑問ですが、やっぱり MFC に戻るしかないのですか!
でも、あのドキュメント=ビュー構造はいまだによく理解できないですね‥‥

921 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 19:52:59.02 ID:0YuzuhSG.net]
c/c++で型が厳しい?何言ってんだろ

922 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 22:34:17.62 ID:GHceiqHX.net]
C++は一応明示的に破ろうとしなければ結構ちゃんとチェックしてくれる
C? 知らんな

923 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 23:10:04.64 ID:NZmV0r2o.net]
>>902-903
「引数が一致しない」という素朴な観点でアウトだろうし例外処理関係ないだろ。

924 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 02:06:22.71 ID:uELWbBar.net]
>>907
でも、引数を関数内で参照して無い場合、素朴な呼び出し規約的には問題ない。
例外処理の unwinding は仕様が難しいので良くわからないと言うこと。
実際は大丈夫かも知れない。

925 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 07:24:52.91 ID:gCkWSKrb.net]
int (int) { return 0; }で埋めて何が嫌なのかが分からないからな
特別な事情があるなら動かすハードとかの仕様調べろ
そんなのないなら素直に安全に書いとけ、でいいじゃん

926 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 07:52:48.02 ID:M2eccXrm.net]
>>904
一つのデータを複数のウインドウで見るって考え方だよ
テキストエディタでもスプリットバーやマルチビューは普通に使うだろ

927 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 07:57:36.04 ID:M2eccXrm.net]
>>909と同意見だ
[](int){return 0;}では何がダメなのか
説明がないとこれ以上何とも言い様がない

928 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 12:52:04.91 ID:X0njcRoR.net]
cは互換型の概念がガバガバだからなあ…
typedefは当然互換だけど、structは中身のpodが同じでも(typedefしなければ!)タグ名で弾けるので、一々structに包めば論理ミスを防ぐこともできなくもない



929 名前:デフォルトの名無しさん [2021/03/01(月) 02:34:24.68 ID:sakgt9rY.net]
規格書を読んでみんなC++覚えてたの?
入門用のドキュメント読んだら規格書読むべきですか?

930 名前:デフォルトの名無しさん mailto:sage [2021/03/01(月) 06:09:14.80 ID:N/bll+Sf.net]
趣味のC++オタクでいいんならそれでいいと思うよ
C++を実用したいならそういうのはやめとけ、というかまず手を動かせ
その上で疑問が出てきたら調べるのはアリ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<256KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef