重载模板化函数

Ezi*_*o A 1 c++ overloading

我怀疑这种方法是否可行,假设你想要两种方法同时调用一个函数,一种是返回一个对象而另一种是通过引用返回参数:

// ...  
template <class T> void func(Foo<T>& f, const T n) 
{ 
    f.a = Something(f.a + n); 
    f.b = Something(f.b + n); 
}

template <class T> Foo<T> func(const Foo<T>& f, const T n) 
{ 
    return Foo<T>( Something(f.a + n), Something(f.b + n) ); 
}
// ...


// main
Foo<int> foo(1, 1);

func(foo, 2);
Foo<int> foo2 = func(foo, 2);
Run Code Online (Sandbox Code Playgroud)

第一个参数中的const字是否影响方法的签名?

Luc*_*ore 5

是的,它确实.const影响签名,返回类型不会.

1.3.11签名

有关参与重载决策的函数的信息(13.3):它的参数类型列表(8.3.5),如果函数是类成员,函数本身和类的cv限定符(如果有的话)其中声明了成员函数.[...]

const 是hte parameter-type-list的一部分,因此它确定了一个重载.