【发布时间】:2009-06-02 17:38:58
【问题描述】:
我有一个现有的方法(或一般的函数),我需要增加额外的功能,但我不想在代码的其他地方破坏该方法的任何使用。示例:
int foo::bar(int x)
{
// a whole lot of code here
return 2 * x + 4;
}
在代码库中被广泛使用。现在我需要将 4 变成一个参数,但是任何已经调用 foo::bar 的代码仍然应该收到它所期望的。我是否应该扩展并重命名旧方法并将其包装成一个新方法,例如
int foo::extended_bar(int x, int y)
{
// ...
return 2 * x + y;
}
int foo::bar(int x)
{
return extended_bar(x,4);
}
或者我应该在头文件中声明一个默认参数,比如
int bar(int x, int y=4);
只是扩展功能
int foo::bar(int x, int y)
{
// ...
return 2 * x + y;
}
每种变体的优缺点是什么?
【问题讨论】:
-
对我来说似乎是风格而不是实质。两者都是可行的解决方案。
标签: c++ backwards-compatibility