当前位置:  开发笔记 > 编程语言 > 正文

c ++模板函数重载

如何解决《c++模板函数重载》经验,为你挑选了1个好方法。

以下是"c ++编程语言"中的行

template T sqrt(T );
template complex sqrt(complex);
double sqrt(double);
void f(complex z )
{
s q r t (2 ); // sqrt(int)
sqrt(2.0) ; // sqrt(double)
sqrt(z) ; // sqrt(complex)
}

我不明白为什么sqrt(z); 电话sqrt(complex)可以任何机构请解释.

作者说, T sqrt> 比较专业,T sqrt 但有一个单独的声明,template complex sqrt(complex);为什么不使用它?



1> MSalters..:

事后来看,如果Bjarne将其写成,那将会更容易

template T sqrt(T);
template complex sqrt(complex);
double sqrt(double);
void f(complex z )
{
    sqrt (2); // sqrt(int)
    sqrt(2.0) ; // sqrt(double)
    sqrt(z) ; // sqrt(complex)
}

所以你不要被所有不同的T弄糊涂.但这个想法很简单; C++找到最佳匹配.有三种可能的功能.前两个是完美匹配(不需要转换),因此忽略非模板版本.现在,我们有T = complex和U = double.选择哪个版本?Bjarne解释说这里选择了第二个模板,因为它更专业.这意味着对于任何类型U,存在T=complex使两个模板的签名相同的类型.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有