c++ - 模板化函数重载返回类型

标签 c++

以下看起来不像是部分特化(然而,这不会发生在模板函数上)。 Plus 函数不会仅通过返回类型来重载。下面这段代码是怎么回事??

#include <iostream>
#include <string>
#include <vector>

template<typename T>
T foo() {
 std::cout << "first";
 return T();   
}


template<typename T, typename U>
std::pair<T,U> foo() {
 std::cout << "second";
 return std::make_pair<T,U>(T(),U()); 
}

int main()
{
    foo<int>();
    foo<int,char>();
}

最佳答案

您有两个 foo 重载(实际上是两个名为 foo 的函数模板)。一个接受一个模板类型参数:

template<typename T>
T foo();

一个接受两个模板类型参数:

template<typename T, typename U>
std::pair<T,U> foo();

您可以重载不同的模板参数。您甚至可以添加采用非类型参数的重载:

template <int I>
void foo() {
    std::cout << "third";
}

这也是一个单独的、有效的重载。你不能做的是单独添加:

template <typename U>
U* foo();

因为现在您有两个名为 foo 的不同函数模板,它们接受一个模板参数,编译器无法知道您指的是哪一个 - 所以现在您有一个有保证的模棱两可的重载。

关于c++ - 模板化函数重载返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31169667/

相关文章:

c++ - 将变量传递给函数

java - 进行网络连接模拟,以避免使用互联网的程序在拨号连接暂时关闭后断开连接

c++ - 奇怪的 vector<long> 添加 '0' 作为 '-1'

c++ - 为什么这会重复打印换行符?

c++ - 管理C++大型静态库

类的第二个实现文件中静态字段的 C++ 外部?

c++ - 已创建 vector 中的奇怪 std::bad_alloc

c++ - 如何通过 win32 c++ 应用程序打开网页

c++ - DEBUG : During Hook procedure call , 它显示 vsjitdebugger.exe 错误

c++ - 我的回击不起作用?