【发布时间】:2014-03-27 21:04:22
【问题描述】:
我有两个函数做几乎相同的事情,唯一的区别是一个实例化它的一个变量,而另一个将它作为参数:
void f1()
{
myType o;
// do work on o
}
void f2(shared_ptr<myType> o)
{
// do work on o
}
这是因为有些调用者在工作完成后需要 o,而有些则不需要。已经完成了很多工作,现在保持功能同步是复制粘贴的事情(也将“o.”更改为“o->”)。是否可以将这些组合成一个函数,这样如果调用者传入一个 o,那么使用它(如在 f2 中),否则构造一个(如在 f1 中)?也许通过在签名中设置默认值?
【问题讨论】:
-
可能是
void f2(shared_ptr<myType> = nullptr)? -
@0x499602D2 我得到一个错误,“重新定义默认参数”。
-
@fatcat1111 你应该只在函数声明中指定默认参数,而不是定义。否则你会得到你引用的错误。
标签: c++ c++11 parameters default