C++ソフトウェア設計 読書会vol.32
https://scrapbox.io/files/677e58cd6851aa4933a854f0.jpeg
#C++ソフトウェア設計
開催日時
2026年6月17日(水) 21:00~22:30
開催URL
https://cpp-osaka.connpass.com/event/397253/
参加人数
3人
読み進め方
ウォーミングアップ
ガイドライン 26:型を静的に区別するには CRTP パターン
CRTP パターンの短所を分析
1つめの短所
共通基底クラスとして抽象化できない
3つめの短所:既存コードに干渉する点
どういうこと?
CRTP の今後:CRTP とC++20コンセプトの比較
C++20のコンセプトを使うことで型の要件を定義できる
ちょいちょい出てくる「干渉」の意味がよくわかっていない
この本で前から言っている依存性を排除する話に関連しているように思える
依存のことを干渉と言ってる
非干渉的に IsDenseVector 型特性を特殊化もできるようになります
ガイドライン 27:静的 mixin クラスには CRTP パターン
強い型付け
実装パターンとしての CRTP パターン
code: cpp
template< typename T, typename Tag, template<typename> class... Skills >
struct StrongType
: private Skills< StrongType<T,Tag,Skills...> >...
{ /* ... */ };
この部分がCRTPになってる
: private Skills< StrongType<T,Tag,Skills...> >
こう書くとSkills部分に書かれる型をすべてprivate継承していく
可変引数テンプレートを継承元として展開するコード初めて見た
7章
次回ここから
お悩み雑談室
用語集
ISP
インタフェース分離の原則
ISP は SRP の特殊なケースと捉える。
SRP
単一責任の原則
OCP
開放/閉鎖原則
LSP
サブタイプ(派生クラス)が満たすべきふるまい
リスコフの置換原則 (ガイドライン6)
サブタイプでは事前条件を強化してはならない
サブタイプは事後条件を弱めてはならない
サブタイプの関数の戻り型は共変(covariance)でなければならない
サブタイプの関数パラメータは反変(contravariance)でなければならない
スーパタイプの不変条件はサブタイプでも維持されなければならない
DIP
依存関係逆転の原則(ガイドライン9)
依存関係を管理するには、具象型や実装詳細ではなく抽象化に依存すべきである