class B : public Super
{
public:
Super* re_new() override
{
delete this;
return new B{};
}
};
>>948
単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed
どれも問題あると思う プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。
>>950
全然スマートじゃないがvisitorパターン使えば? >>953
> 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない?
エラーにしちゃえばいいだろ つまり意識しなきゃならんてことか
じゃあ素直に関数にしろよ
>>953
一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。
あくまでも「変数に見せかける」、
つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、
余計な気を回してもわかり難さが増すだけだよ。
rvalue なのは仕方がない。 どうしてアドレスを取りたがるのかよくわからない
クラスのメンバ関数だってアドレス取れないだろ
>>959
メンバ関数のポインタ構文が何故あるのですか? 取れるよ、何言ってんの
そのポインタは動的結合までできる優れもの
>>959
変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか?
データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。
でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。 objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ
うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる
C#とかはその辺の問題どう解決してるのかしらね
property int count {
>>() {return count_ ; } // getter
<<(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
};
みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする
コードを減らす為の規格追加でコードを増やす解決法
う〜ん
>>969
これは抽象化の話なんだよ。
変数のように見せかけるためには何が必要かって話なの。 property int count {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
}
この方がしっくり来るな
予約語を増やすとどれだけの影響があるか
なんて考えたことはないのかな?
まあここはC++相談室
おれが考えた最強言語を語るところじゃない
opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく
プロパティを実現できるのではないかと妄想していた。
using count = int {
() {return count_ ; } // getter
=(int cnt) {SetCount(cnt):} // setter
&() {return &count_;} // address getter
++() {return ++count; } // incrementer
};
予約語増やさないならこんな感じに書けなくもない
プロパティの実装の議論までここでするか?
Dと同じでいいじゃん
前提が違うものを同じには出来ないよ。
参考にすることはあると思うけど。
仮想関数のアドレスが取れないという発言は何だったんだろう
>>950
std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB"); 0982デフォルトの名無しさん2018/03/31(土) 13:50:16.75
>>950
クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、
そのstaticメソッドへのポインタを返す共通メソッドを用意する。 リフレクションがある言語でGUIの画面またはユーザーコントロールを作成する際に
YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや
C++にプロパティー入れたらリフレクションも来るでこれは…
もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな…
ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ…
(IValueConverter.Convert(), IValueConverter.ConvertBack(),
IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ...
リフレクションはゴミとまで言わないけどc++にはいらない機能
0986デフォルトの名無しさん (ワッチョイ d180-3UCh)2018/03/31(土) 16:09:17.20ID:D1vbg0pQ0
リフレクションがあれば死なずに済んだ人もいるだろうに。
c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか?
>>990
ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー 0992デフォルトの名無しさん (アウアウウー Sa45-HAdz)2018/04/01(日) 19:11:40.34ID:BG5JJopwa
pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと?
そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。
>>995
そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。 0999デフォルトの名無しさん2018/04/02(月) 11:52:25.29
>>998
WYSIWYGのtypoなだけやん
アスペか 10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 3時間 44分 41秒
10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php