私はdynamic polymorphism
を使用していますが、すべて正常に動作しますが、約static polymorphism
を読んだ後、私はこの後者が動的なオーバーヘッドを克服すると結論付けました。静的多型を使用して動的多型のすべての機能を達成できますか?
エクストラ間接(ポインタ参照)仮想メソッドへの各呼び出しのために:ここ
は動的多型のいくつかのオーバーヘッドです。
通常、仮想メソッドはインライン化できません。これは、いくつかの小さなメソッドでは大きなヒットとなる可能性があります。
オブジェクトごとに追加ポインタ。最近普及している64ビットシステムでは、オブジェクトあたり8バイトです。データがほとんどない小さなオブジェクトの場合、重大なオーバーヘッドになる可能性があります。
非常に簡単な例で誰でも私に説明することができますStatic polymorphism
。そして、私はそれを動的なものの代わりに使うべきですか?
この例が見つかりましたが、申し訳ありませんがわかりません。それは曖昧に見えます:
#include <iostream>
using namespace std;
template <typename Child>
struct Base
{
void interface()
{
static_cast<Child*>(this)->implementation();
}
};
struct Derived : Base<Derived>
{
void implementation()
{
cerr << "Derived implementation\n";
}
};
int main()
{
Derived d;
d.interface(); // Prints "Derived implementation"
}
"静的多型を使用して動的多型のすべての機能を達成できますか?" - コンパイル時と実行時の多型を尋ねると仮定すると、「いいえ」と表示されます。 –