一、原理
利用C++多态技术实现非成员函数行为的虚化是指多态类中写一个虚函数做实际工作,并增加一个函数只负责调用多态类的虚函数,根据入参所指的实际对象的不同调用不同的虚函数实现。
这种通过多态方法绑定,入参变量可以在运行时控制不同类的对象的方法可以称为动态参数化。
二、样例
#include <ostream>
#include <iostream>
using namespace std;
struct NLComponent
{
virtual ostream& print(ostream& s) const = 0;
// ...
};
struct TextBlock : NLComponent
{
virtual ostream& print(ostream& s) const override
{
cout << "TextBlock:" << __func__ << endl;
// do something
return s;
}
// ...
};
struct Graphic : NLComponent
{
virtual ostream& print(ostream& s) const override
{
cout << "Graphic:" << __func__ << endl;
// do something
return s;
}
// ...
};
// 具有多态行为的函数
inline ostream& operator<<(ostream& s, const NLComponent& c)
{
return c.print(s);
}
int main()
{
cout << TextBlock() << Graphic() << endl;
return 0;
}
程序输出: