繁体   English   中英

模板函数之间会发生重载吗?

[英]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 采用stringgeneric type T

它的高效在于它允许根据传递的参数类型将相同的 function 名称用于不同的目的,从而使代码更具可读性和可维护性。

但是,在情况 3中,您将string作为第一个参数传递,并将 int 作为第二个参数传递,编译器将这两个函数视为同等有效的候选者,从而导致歧义错误 要解决此问题,您可能需要将字符串显式转换为 int使 func 模板更具体以避免此类歧义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM