static polymporhismの概念についていくつか質問があります。それらは主にC++のコンテキストで解釈できますが、該当する場合は言語に依存しない回答をいただければ幸いです(したがって、C++と言語に依存しない両方のタグ付け)。
どうすればdefine一般的に静的ポリモーフィズム?例として、私はstd::sort
C++の関数は、イテレータのように動作する、および提供されたイテレータのインターフェイスでの正確な動作ができるいくつかのオブジェクトによって提供されるインターフェイスに依存するため、静的に多形であると見なされます。コンパイル時に決定されます。この説明は、静的ポリモーフィズムを定義する方法ですか、それとも特定のケースの説明にすぎず、それ以上のものがありますか?
一般的なコードパターンは何ですか C++で静的ポリモーフィズムを使用するのですか?また:SP のみ C++のテンプレートを介して達成されますか?
それは本当ですか与えられたUMLクラス図は直接ポリモーフィズムがどのように処理されるかを記述していないので、少なくとも部分的に静的または動的に実装できますか?言い換えれば、静的ポリモーフィズムと動的ポリモーフィズムの選択は、OOPモデルとは無関係であり、したがって、実装者が決定する必要がありますか?
静的ポリモーフィズムはC++固有のみですかそしてテンプレートの動作に関連していますか?そうでない場合は、C++以外の主流言語に存在しますか? Java、C#..で静的ポリモーフィズムに相当するものを使用できますか?それは何らかの利点をもたらしますか?
最も重要なのは...静的ポリモーフィズムを使用することの実際の利点は何ですか?コードの柔軟性が低下することに同意できると思います。 C++の場合、1つのポインター逆参照(仮想関数/関数へのポインター/デリゲートコスト)を節約する以外に、どのような利点がありますか? 問題のクラス静的ポリモーフィズムが特に役立つ場合、実装の正しい選択は何ですか?
現在、テンプレート自体には、コンパイル時のポリモーフィズムを実現する以外にも多くの用途があります。たとえば、boost::bind
を機能させるSFINAEマジックは、確かにポリモーフィックではありません。言語自体の不整合を滑らかにするためだけにあります。
一般に静的ポリモーフィズムをどのように定義しますか?
例を使用してそれを理解するための最良の方法。 ポリシーベースの設計 は静的ポリモーフィズムの一例です。そして私の意見では、静的ポリモーフィズムを実現することは非常に強力な手法です。
もう1つの例は、 不思議なことに繰り返し発生するテンプレートパターン(CRTP) です。これも強力な手法です。