功能重载和模板

时间:2015-11-24 05:26:37

标签: c++ function templates overloading

x1.*x2

以上代码会引发以下错误。

#include <iostream>
using namespace std;


template <typename ReturnType, typename ArgumentType>
ReturnType Foo(ArgumentType arg){}


template <typename ArgumentType>
string Foo(ArgumentType arg) { cout<<"inside return 1"<<endl; return "Return1"; }

int main(int argc, char *argv[])
{

    Foo<int>(2);        
    return 0;
}

因为,函数重载只考虑函数名,参数类型列表和封闭命名空间。为什么会抛出这个错误?

1 个答案:

答案 0 :(得分:2)

Foo<int>(2)的调用可以是:

ReturnType Foo(ArgumentType arg); //with ReturnType = int, ArgumentType deduced as int

string Foo(ArgumentType arg); //with ArgumentType = int

编译器不能告诉你想要哪一个,因为它们都有相同的参数:

int Foo(int);
string Foo(int);