一般化と多型に関する決定を下す必要があります。C++標準の練習:仮想インターフェイスのクラスとテンプレート
まあシナリオは標準です:私はモノリシックな相互依存性のある コードをよりモジュラーでクリーンで拡張性のあるものにしたいと考えています。 デザイン原則の変更が可能な段階ですが、 と私はそれを見ると非常に望ましいです。
純粋に仮想ベースクラス(インターフェイス)またはテンプレートを紹介しますか?
は、私は、テンプレートオプションについての基本を知っています: 少ない間接、より優れた性能は、より多くのように が、無遅延バインディング 、およびコンパイル。
stlは継承をあまり使用しないか、または昇格しません。 しかし、私はそれらがプログラマーによってコードの2行を すべて使用される本当に小さな基本的なツールであることを目指していると思います。
プラグインスタイルのコードと機能の交換が可能であること、 更新可能など、デプロイメント後または実行時にプラグインスタイルがより賢明であると考えています。
まあ、私のシナリオは多少の間にあります。
実行時にコードを交換する必要はありません。コンパイル時に問題はありません。 通常、非常に中心的で頻繁に使用される機能でもあり、 は大きなブロックに論理的に分離できません。
これにより、テンプレートの解決に多少時間を費やすことができます。 私にとっては、ややきれいに見えます。
大きな悪影響はありますか?まだインターフェイスはありますか? どうすればいいですか?彼らはいつですか? これは標準的なC++スタイルをより遵守していますか?
私はこれが主観的に接していることを知っていますが、私は本当に興味があります いくつかの経験。私はスコットマイヤー効果的なCのコピーを持っていません 私はあなたの人に私の希望を設定しました:)
私は、インターフェイスではなくテンプレートを使用して1つの問題を見ています。要件は完全に暗黙的です。純粋仮想関数を実装する必要がある場合、その正確な署名が与えられます。しかし、_AllocTやIterのようなテンプレートタイプを見ると、あなたのクラスに必要なものや、クラスでなければならないことは分かりません。唯一の知るべき唯一の方法は、それについてのまともなドキュメントを探すことです。私は今日、自分自身のstl互換のアロケータクラスを作成しようとしているときに問題を抱えていました。 – Virus721
"知っているだけのことは、まともなドキュメントを探すことです" - あるいは、コンパイラがどの関数を見つけることができないと不平を言ってコンパイルしようとしているのかを見てみましょう。また、概念はこの問題を解決するためのものです。 (そして、たとえそれがインターフェースだったとしても、まともな文書を見つける必要があるでしょう。上書きする関数を知るだけでは不十分です。また、セマンティクスがどのようなものであるべきかを知る必要があり、インターフェースはそれをあなたに伝えません)。それでも、あなたは正しいです。言語が両方をサポートする理由があります。 :) – jalf