[英]Could overload happen between template functions?
如果我这样设计
template<class T>
void func(int i, T t) {
i = i * 2;
cout << "int change into " << i << "when t is " << t << endl;
}
template<class T>
void func(string s, T t) {
cout << "string size is " << s.size() << "when t is " << t << endl;
}
他们通过调用来工作
func<int>(1, 1); --------> case 1
func<string>(1, "a"); --------> case 2
func<int>("a", 2); --------> case 3
但在我的例子中,模板函数(在情况 1 和 3 之间)用于处理第一个参数的重载,而 function 重载(在情况 2 和 3 之间)的用途相同,但在第二个参数上。 所以我觉得我的 function 设计中有冗余吗? 我的设计有效且高效吗?
这种设计是有效的,并且遵循了 C++ 中C++
重载的概念。 Function 重载允许在一个程序中存在多个同名但参数不同的函数。
在这个设计中,第一个模板 function func采用一个int
和一个generic type T
作为参数,第二个模板 function 采用string
和generic type T
。
它的高效在于它允许根据传递的参数类型将相同的 function 名称用于不同的目的,从而使代码更具可读性和可维护性。
但是,在情况 3中,您将string
作为第一个参数传递,并将 int 作为第二个参数传递,编译器将这两个函数视为同等有效的候选者,从而导致歧义错误。 要解决此问题,您可能需要将字符串显式转换为 int或使 func 模板更具体以避免此类歧义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.