我有两个函数做几乎相同的事情,唯一的区别是一个实例化其中一个变量而另一个将它作为参数:
void f1()
{
myType o;
// do work on o
}
void f2(shared_ptr<myType> o)
{
// do work on o
}
这是因为有些呼叫者在完成工作后需要o,而有些则不需要。有很多工作要做,现在保持功能同步是一个复制粘贴事件(也改变“o。”到“o-&gt;”)。是否有可能将这些组合成一个单独的函数,这样如果调用者传入一个o,那么就使用它(如f2),否则构造一个(如f1中所示)?也许通过在签名中设置默认值?
答案 0 :(得分:4)
将std::make_shared
功能与默认参数结合使用:
void f2 (shared_ptr<myType> o = make_shared<myType>())
答案 1 :(得分:1)
第一个函数可以使用std::shared_ptr
和 null删除器转发到第二个函数:
struct null_deleter
{
template <typename T>
void operator()(T*) { }
};
void f1()
{
myType o;
f2(std::shared_ptr<myType>(&o, null_deleter{}));
}
答案 2 :(得分:0)
简单地重载功能:
void f1() // void seems odd, wouldn't you return o after you've done work on it?
{
yourType o;
// do work on o
}
void f1(yourType& o)
{
// do work on o
}