重载模板化函数
Overloading templated functions
我怀疑这种方法是否可行,假设您想要同时调用函数的两种方法,一种是返回对象,另一种是通过参数中的引用返回:
// ...
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);
第一个参数中的常量字会影响方法的签名吗?
const
会影响签名,而返回类型不会。
1.3.11签名
有关参与过载的函数的信息分辨率(13.3):其参数类型列表(8.3.5),如果函数是类成员,函数上的cv限定符(如果有的话)它本身和在其中声明成员函数的类。[…]
const
是参数类型列表的一部分,因此它确实确定了重载。
是的,对const
的引用是对非const
的引用的独立类型,因此具有这些参数的两个函数是独立的重载。
然而,这将不起作用:
Foo<int> foo2 = func(foo, 2);
由于foo
不是const
,这将选择无返回值的非const
过载;因此分配将失败。您需要明确选择const
版本:
Foo<int> foo2 = func(static_cast<const Foo<T>&>(foo), 2);
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载