c ++中的函数是否存在“智能”重载?
简单:
classname classname::Foo(const classname& t){
classname workVar = t.clone();
//great work, like this GREAT(), that changing workVar;
return workVar;
}
//back-side effect here, changing object
void classname::Foo(){
classname workVar = (*this).clone();
//the same, GREAT() changing workVar
(*this).copy(workVar);
}
是否有任何可能的方法将这两个功能合并为一个?
第一种方式,用于更改当前对象:
obj = obj.Foo(obj);
第二种方式:
obj.Foo();
如何将这些功能合并到一个具有重新定义功能的功能中?
答案 0 :(得分:1)
在你的第二个Foo()中你指定一个“this”但它看起来不像一个类成员函数。是classname :: Foo()?
clone()通常返回一个指向新创建的对象的指针,该对象与您创建的对象相同。因此,您将它分配给指针变量。虽然它可以返回一个引用,但它会让你感到困惑,因为你需要管理它,即稍后删除它,你通常不希望这样做参考。
您不会像现在这样将克隆分配给新对象。
this.
在C ++中不是有效的语法,因为“this”始终是指针。
如果你的一般性问题是一个名为Foo的外部函数是否需要const T&可以自动调用T::Foo
,而boost::bind
实际上做了一些非常聪明的事情,因为你可以做类似的事情
boost::bind( &classname::Foo, workVar )
来自外部和
boost::bind( &classname::Foo, this )
从内部,如果是免费功能,那么
boost::bind( Foo, workVar )
也可以,每个都创建一个不带参数的函数,虽然在你的情况下它们有不同的返回类型,所以它不适用于你的特定例子。
`