我有一个广泛使用的c ++库,它包含如下方法:
foo();
我想重载此函数以使用默认参数,例如:
foo(bool verbose=false);
这个更改是否迫使我重新编译使用此函数的每个代码?
如果没有参数继续工作,foo()
无法调用,因为no-args-signature没有改变?
感谢
答案 0 :(得分:3)
这个更改是否迫使我重新编译使用此函数的每个代码?
是的,编译将失败,因为会有歧义。
你能做的就是重载这个功能:
foo(bool verbose);
并将案例foo()
视为参数为false。
这不需要重新编译。你只有两个功能:
foo() { foo(false); } //possibly
foo(bool verbose);
而不是默认参数。
答案 1 :(得分:1)
如果你的意思是想要同时拥有两者,那么你就无法知道你的意思。
如果您的意思是要将foo()
替换为foo(bool verbose=false)
,那么它将是重新编译,因为调用代码并未真正调用foo()
,它正在调用foo(false)
用语法糖隐藏那个。
你可以拥有:
someType foo(bool verbose)
{
//real work here.
}
someType foo()
{
return foo(false);
}
或如果无效:
void foo(bool verbose)
{
//real work here.
}
void foo()
{
foo(false);
}
虽然如果您的管理员foo()
完全处于标题中并且无法理解,那么这是另一回事。