C++ソフトウェア設計 読書会vol.27
https://scrapbox.io/files/677e58cd6851aa4933a854f0.jpeg
#C++ソフトウェア設計
開催日時
2026年3月18日(水) 21:00~22:30
開催URL
https://cpp-osaka.connpass.com/event/387189/
参加人数
5人
読み進め方
ウォーミングアップ
6章 Adapter パターン、Ob­server パターン、CRTP パターン
ガイドライン 24:インタフェースを統一するには Adapter パターン
解明 Adapter パターン
Pagesの例
これってデザインパターンなんだ
多分みんなデザインパターンと知らずにこういう実装しそう
オブジェクトアダプタとクラスアダプタ
前にも出てきたhas-a関係とis-a関係のアダプタ
基本的にはオブジェクトアダプタの方がいい
標準ライブラリでの実例
コンテナアダプタ
std::stack
シーケンスコンテナとして以下を選べる
std::vector
std::list
std::deque
二重終端キュー
通常のリストの各要素がarrayになっているような構造
実質的にはlistなので効率はあまりよくない
vectorとlistの中間的な特性を持つ
デフォルトのコンテナが効率がよくないと言われるdequeなのはどうしてだろう?
実装によって効率のいい方法があるのかも
vectorだとメモリ再確保の刑があったりするが、dequeはその負荷が軽減される
std::queue
std::priority_queue
アダプタ
昔で言うラッパー
コールバック
今だとデリゲートとか言う
Adapter パターンと Strat­egy パターンの比較
std::unique_ptrのデリータは削除の1つの機能しか指定しない
std::stackなどは複数の動作をContainerで指定する
関数アダプタ
このtraverseRange()でauto&& elementの&&で受ける理由がよくわからない
引数がconst参照で受けているので&&にする意味があまりないような
引数がRange rangeとかだったらまだ可能性ありそうだけれど
ADLを正しく理解できている人はほとんどいない(人間じゃない)
Adapter パターンの短所を分析
次回ここから
お悩み雑談室
会社でADL使いますか?
使ってないです・・・
関数オーバーロードも嫌がる人がいる
きちんと名前を付けてほしいと言われた
(お互いの会社大変ですね…という内容)
用語集
ISP
インタフェース分離の原則
ISP は SRP の特殊なケースと捉える。
SRP
単一責任の原則
OCP
開放/閉鎖原則
LSP
サブタイプ(派生クラス)が満たすべきふるまい
リスコフの置換原則 (ガイドライン6)
サブタイプでは事前条件を強化してはならない
サブタイプは事後条件を弱めてはならない
サブタイプの関数の戻り型は共変(covariance)でなければならない
サブタイプの関数パラメータは反変(contravariance)でなければならない
スーパタイプの不変条件はサブタイプでも維持されなければならない
DIP
依存関係逆転の原則(ガイドライン9)
依存関係を管理するには、具象型や実装詳細ではなく抽象化に依存すべきである