我习惯使用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"
}