- 1 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:05:42.21 ID:mJKRg6iz0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part133 mevius.5ch.net/test/read.cgi/tech/1511509970/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 970 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:12:18.16 ID:aFk+9CH40.net]
- >>942
>>942はiostreamを擁護する気か
- 971 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:19:06.77 ID:iyPH7JTK0.net]
- ダイヤモンド継承使われてるんだっけ
あれ使ったことないな いらない機能だと思うなら使わないってだけだしプロパティはあった方がらくだと思うけどね 独自拡張でつけてるのもあるし
- 972 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:25:31.98 ID:NJ7AGlMvd.net]
- >>943
凄くないよ >>944 すまん。適当書いたけどiostremは擁護出来ねえわ
- 973 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:47:52.27 ID:C63IJ9vb0.net]
- iostreamの<<チェーンが実は最近まで規格上未定義動作だった話は正直呆れた
- 974 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 01:02:47.99 ID:19OTzhSN0.net]
- 採択されてもプロパティのアドレスをどうやって取るのかっていうことで標準化委員会で揉めて10年は停滞する
- 975 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 01:48:24.57 ID:nFIfPX7B0.net]
- >>948
サブオブジェクトがユニークアドレスを取れなくてもいいことを示す [[no_unique_address]] 属性が C++20 のドラフトに入った。 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0840r1.html オブジェクトがユニークなアドレスを持つ原則を捨てたわけ。 これを踏襲するなら、プロパティのアドレスは取れないってことにして解決するのが自然で、揉める余地はそんなにないと思う。 実際にアドレスは存在しないわけだし、存在しないものを返しようがないじゃん。
- 976 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 02:09:16.31 ID:19OTzhSN0.net]
- >>949
最初のプロパティの提案がいつかはしらないけど 実際にこれが決まったとして最短で2020年 そこから更に何年かかるのか
- 977 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:29:43.55 ID:O6Ruc86y0.net]
- 抽象クラス"Super"から派生した子クラス、"A", "B", "C"があったとします。
Super* obj1 = new A(); Super* obj2 = new B(); Super* obj3 = new C(); 訳あって動的に作成したインスタンスobj1〜3を一度deleteしたのち 再び同じ子クラスでインスタンスを作成しようと思います。 obj2がクラスBのインスタンスであることが一目で分からない場合に obj2がクラスBのインスタンスであることを突き止め、一度deleteし、 再度クラスBでインスタンスを作成する方法はあるでしょうか? ちなみに必死に考えて考えついた方法ですが クラスA, B, Cにそれぞれ「私はAクラスです」「私はBクラスです」みたいな 文字列を出力する共通メソッドをpublicで作成し、そのメソッドを実行して 帰ってきた文字列からそれがどのクラスのインスタンスか判別が付くのではないかなと思いました。 決してスマートな方法とは言えませんが・・・ もっとスマートな方法はありますか?
- 978 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:37:13.22 ID:350O8bDz0.net]
- ・・・?
typeidじゃアカンの?
- 979 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 05:55:27.21 ID:15qJIIAA0.net]
- class B : public Super
{ public: Super* re_new() override { delete this; return new B{}; } };
- 980 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:37:47.25 ID:C63IJ9vb0.net]
- >>949
単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed どれも問題あると思う
- 981 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:47:39.87 ID:8va89mAu0.net]
- プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。
- 982 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:02:21.38 ID:5h07DQhTa.net]
- >>951
全然スマートじゃないがvisitorパターン使えば?
- 983 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:03:59.00 ID:OaeapR1O0.net]
- >>954
> 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? エラーにしちゃえばいいだろ
- 984 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:14:46.66 ID:HGehdmya0.net]
- つまり意識しなきゃならんてことか
じゃあ素直に関数にしろよ
- 985 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:16:04.32 ID:nFIfPX7B0.net]
- >>954
一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。 あくまでも「変数に見せかける」、 つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、 余計な気を回してもわかり難さが増すだけだよ。 rvalue なのは仕方がない。
- 986 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:16:21.25 ID:Nj0xu+770.net]
- どうしてアドレスを取りたがるのかよくわからない
クラスのメンバ関数だってアドレス取れないだろ
- 987 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:00.18 ID:Nj0xu+770.net]
- ああメンバ仮想関数な
- 988 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:37.44 ID:8va89mAu0.net]
- >>960
メンバ関数のポインタ構文が何故あるのですか?
- 989 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:44.11 ID:8va89mAu0.net]
- あー。
- 990 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:22:26.84 ID:Nj0xu+770.net]
- 訂正しただろ
仮想関数はアドレスが取れないだろ
- 991 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:23:29.95 ID:15qJIIAA0.net]
- 取れるよ、何言ってんの
そのポインタは動的結合までできる優れもの
- 992 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:25:45.36 ID:Nj0xu+770.net]
- 出来ないよ
何いってんの
- 993 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:26:00.49 ID:nFIfPX7B0.net]
- >>960
変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか? データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。 でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。
- 994 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:41:17.12 ID:C63IJ9vb0.net]
- objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ
うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる C#とかはその辺の問題どう解決してるのかしらね
- 995 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:48:31.98 ID:Nj0xu+770.net]
- property int count {
>>() {return count_ ; } // getter <<(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter }; みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする
- 996 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:00:37.36 ID:HGehdmya0.net]
- コードを減らす為の規格追加でコードを増やす解決法
う〜ん
- 997 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 10:21:02.77 ID:nFIfPX7B0.net]
- >>970
これは抽象化の話なんだよ。 変数のように見せかけるためには何が必要かって話なの。
- 998 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:29:50.12 ID:15qJIIAA0.net]
- >>966
https://ideone.com/1J8uwf
- 999 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:35:19.80 ID:Nj0xu+770.net]
- property int count {
() {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer } この方がしっくり来るな
- 1000 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:56:40.26 ID:aygih7Tkd.net]
- 予約語を増やすとどれだけの影響があるか
なんて考えたことはないのかな?
- 1001 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:57:47.19 ID:aygih7Tkd.net]
- まあここはC++相談室
おれが考えた最強言語を語るところじゃない
- 1002 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:05:17.81 ID:nFIfPX7B0.net]
- opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく
プロパティを実現できるのではないかと妄想していた。
- 1003 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:10:24.41 ID:Nj0xu+770.net]
- using count = int {
() {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer }; 予約語増やさないならこんな感じに書けなくもない
- 1004 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:21:25.52 ID:Pb+ZodvD0.net]
- プロパティの実装の議論までここでするか?
Dと同じでいいじゃん
- 1005 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:23:19.53 ID:nFIfPX7B0.net]
- 前提が違うものを同じには出来ないよ。
参考にすることはあると思うけど。
- 1006 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:19:04.21 ID:+mjd8c8id.net]
- 仮想関数のアドレスが取れないという発言は何だったんだろう
- 1007 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:29:05.67 ID:19OTzhSN0.net]
- >>951
std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB");
- 1008 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:32:44.21 ID:aygih7Tkd.net]
- スレチ
次スレまで引きずるなよ
- 1009 名前:デフォルトの名無しさん [2018/03/31(土) 13:50:16.75 .net]
- >>951
クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、 そのstaticメソッドへのポインタを返す共通メソッドを用意する。
- 1010 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:23:30.31 ID:aFk+9CH40.net]
- リフレクションがある言語でGUIの画面またはユーザーコントロール
- 1011 名前:作成する際に
YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや C++にプロパティー入れたらリフレクションも来るでこれは… もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな… [] - [ここ壊れてます]
- 1012 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:30:32.65 ID:aFk+9CH40.net]
- ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ…
(IValueConverter.Convert(), IValueConverter.ConvertBack(), IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ...
- 1013 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:43:53.79 ID:UG1yVXDXa.net]
- リフレクションはゴミとまで言わないけどc++にはいらない機能
- 1014 名前:デフォルトの名無しさん [2018/03/31(土) 16:09:17.20 ID:D1vbg0pQ0.net]
- リフレクションがあれば死なずに済んだ人もいるだろうに。
- 1015 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:37:26.06 ID:UG1yVXDXa.net]
- デバッグでリフレクション使うのか?
- 1016 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:24:42.16 ID:o3PNwIlC0.net]
- C++相談室 part135
mevius.5ch.net/test/read.cgi/tech/1522495206/ もう糞テンプレいらないよね? あと死ね
- 1017 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:27:57.63 ID:u+oLKOIo0.net]
- うむごくろう。
- 1018 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:13:20.31 ID:JVL2cf0wa.net]
- c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか?
- 1019 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:43:04.30 ID:nEv6CmIlM.net]
- >>991
ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー
- 1020 名前:デフォルトの名無しさん [2018/04/01(日) 19:11:40.34 ID:BG5JJopwa.net]
- pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと?
- 1021 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 20:21:44.04 ID:WPbk7cUz0.net]
- そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。
- 1022 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 21:12:28.11 ID:47FEpc5z0.net]
- https://www.google.com/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch
- 1023 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 22:32:25.37 ID:EwuQ9U5u0.net]
- (餃子が (御乱心 (されたぞー)))
- 1024 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 23:03:08.00 ID:47FEpc5z0.net]
- >>996
そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。
- 1025 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 07:54:09.78 ID:t04teqlda.net]
- いやいやこんなの丸刈りやん
- 1026 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 09:36:33.18 ID:E1iWIfmB0.net]
- >>984
YSIWYGってなに?
- 1027 名前:デフォルトの名無しさん [2018/04/02(月) 11:52:25.29 .net]
- >>999
WYSIWYGのtypoなだけやん アスペか
- 1028 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 12:50:23.03 ID:E1iWIfmB0.net]
- 訂正だろ? 態度悪いなおまえ
- 1029 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 72日 3時間 44分 41秒
- 1030 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|