如果您真的认为新结构更好,那么我会同意 Luchian Grigore 所说的,但这不是唯一的选择。例如,您可以使用代理:
struct Base {
virtual void doSomething() = 0;
};
void someFunction(Base &base)
{
...
base.doSomething();
...
}
struct NewClass : Base {
virtual void doSomething();
};
struct OldClassProxy : Base {
OldClassProxy(OldClass &old) : old(old) { }
virtual void doSomething()
{
old.doSomething();
}
OldClass &old;
};
现在您可以将新函数与旧类的实例一起使用,而无需修改旧类:
NewClass a;
OldClass b;
someFunction(a);
OldClassProxy b_proxy(b);
someFunction(b_proxy);
如果有很多地方需要代理,那么你可以编写一个重载:
void someFunction(OldClass &old_class)
{
OldClassProxy proxy(old_class);
someFunction(proxy);
}
这将让你这样做:
NewClass a;
OldClass b;
someFunction(a);
someFunction(b);