繁体   English   中英

模板与类似的非模板函数

[英]Templates vs Similar Non-Template Functions

我创建了一个Template Specialized函数和一个具有相同参数的非模板函数。 由于两者都是相同的函数,我不确定C ++编译器如何运行它,因为它现在有两个相同的函数,一个是专用模板,另一个是非模板函数。 我原以为这会导致编译错误,因为编译器会找到两个具有相同参数和返回类型的函数(在本例中为void foo(string))。 但看起来非模板版本是在调用它时执行的版本。 这样做有优先权吗?

如果我误解了,请告诉我。

代码:打印'String Non-Template'

#include <iostream>
#include <string>
using namespace std;

template<typename T>
void foo(T input)
{
    cout <<"Generic Template"<<endl;    
}

template<>
void foo<string>(string input)
{
    cout <<"String Template"<<endl;
}

void foo(string input)
{
    cout <<"String Non-Template"<<endl;
}

int main() {

    string input = "abc";
    foo(input);

    return 0;
}

常规函数总是优于函数模板,甚至是函数模板的特化。

从C ++标准:

13.3.3最佳可行功能[over.match.best]

1如下定义ICSi(F):

...

给定这些定义,可行函数F1被定义为比另一个可行函数F2更好的函数,如果对于所有自变量iICSi(F1)不是比ICSi(F2)更差的转换序列,然后

...

- F1是非模板函数, F2是函数模板特化,或者,如果不是,

暂无
暂无

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

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