[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
189
(4): ◆QZaw55cn4c (ワッチョイ 3583-LgJ8) [] 2024/01/28(日) 20:27:29.75 ID:0TnCAHFI0(1) AAS
思い立って結城さんのデザパタ(古いjava で記述)を総称型(テンプレート)もちゃんと使ってC++ に書き直しているけれども、
new/delete からptr::shared_ptr に書きなおすと、もう構造がわかりにくくなってしまってどうしようもない
デザパタ=抽象クラスプログラミングは C++ ではオワコンなの?
Visitor パターン
new/delete: 外部リンク:ideone.com スッキリ書けてきもちいい
std::shared_ptr: 外部リンク:ideone.com 恐ろしい宣言の連発

>std::shared_ptr<Iterator<std::shared_ptr<Entry>>> iterator() { return std::make_shared<VectorIterator<std::shared_ptr<Entry>>>(v); }

なんかもう書いてても意味不明
CONSTRUCTOR(CONSTRUCTOR *p) とかコピコン以外にもみたことのないコンストラクタが要求されるし
190: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-vdg+) [sage] 2024/01/28(日) 20:53:25.29 ID:hRRbWEE/0(1/3) AAS
>>189
スマートポインタを使わないバージョンも C++ 的にはすっきりしてない。
動的多態の必要が必要ないのに持つべきメンバ関数を強制するためだけに抽象クラスを使っていて不恰好に見える。
コンセプトの導入がだいぶん後回しになった C++ の問題でもあるんだが……。
設計理念が妥当かどうかはともかくとして、元が Java なら直訳めいた C++ への置き換えがすっきりと書けるはずがない。
192: デフォルトの名無しさん (ワッチョイ b501-PlwZ) [sage] 2024/01/28(日) 22:46:18.85 ID:VLKT1lFt0(1) AAS
>>189
usingなりtypedefでエイリアス作れば?
using Entry_Ptr = std::shared_ptr<Entry>;
198
(2): デフォルトの名無しさん (ワッチョイ bda8-xxv9) [sage] 2024/01/29(月) 21:21:12.23 ID:eAAuxXw40(1) AAS
>>189 c++
外部リンク:ideone.com
外部リンク:ideone.com を元に若干の整理を行った

・他の人と同様shared_ptrを削除
 値で持てるところは単に値で持つほうがC++っぽいと思う
 ただ「Entry を値で持つのはいやだなあ」とのことなので部分的に残してる
 Javaの参照型変数をshared_ptrに置き換えようとして困るのは
 size_t File::accept(std::shared_ptr<Visitor> v) { return v->visit(std::make_shared<File>(this)); }
 ここがJavaだと単にvisit(this)で済むからスッキリするんだけど
 しかもこれmake_shared(this)だと多重開放するよね??

>>189 c++
外部リンク:ideone.com
外部リンク:ideone.com を元に若干の整理を行った

・make_shared<File>(this)の多重開放?を修正
 std::enable_shared_from_thisを使ってJavaの参照型変数っぽい使用感を得た。

・struct this_is_private {};
 これは単にコンストラクタを実質的にprivateにするためだけに使ってる
 外部リンク:en.cppreference.com
 外部リンク:stackoverflow.com
 このへん参照されたし
204: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-MxBP) [sage] 2024/02/03(土) 14:49:57.28 ID:Sz70frqK0(2/2) AAS
>>203
203(1): ◆QZaw55cn4c (ワッチョイ 3555-LgJ8) [] 2024/02/03(土) 10:15:36.86 ID:21sfApha0(2/2) AAS
>>198
>値で持てるところは単に値で持つほうがC++っぽいと思う
時代の流れを感じさせるお言葉です。なにせ K&R1 で育った世代なので(K&R1 では構造体の実体渡しはできず、かならずポインタで渡さなければならなかった)。
C++ においても、コピコンを働かせないために const & を多用する毎日です
内部的に値で持つのでもポインタで持つのでもいいけど
「簡単に値として取り出せる」のはあまりよろしくないと思う。
これ (>>189) がおそらくファイルシステムを表現しようとするもの
だという前提を考えたらオブジェクトの構造も
ファイルシステムのモデルを抽象するものであるべきだと思うから。

ファイルはそれがある場所にも意味があるからファイルを象徴するオブジェクトが
場所から離れてやりとりされるのは違和感がある。

まあファイルシステムのモデルをどう捉えるかは私の感想でしかないから
何が妥当とは強くは主張しないけど、
いずれにしても実装上の都合じゃなくて使う側の感覚でどうなってて欲しいかという視点が要ると思う。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.043s