使用带有 void 函数的模板

Using template with a void function

本文关键字:函数 void      更新时间:2023-10-16

我正在尝试使用带有 void 函数的 c++ 模板泛型,

代码:

#include <iostream>
using namespace std;
template <typename T>
inline void swap(T& x, T& y)
{
    T temp = x;
    x = y;
    y = temp;
}
int main() 
{
    cout << "Swapper!" << endl;
    int x, y;
    cin >> x >> y;
    swap(x, y);
    cout << x << y;
    cin.get();
    return 0;
}

但它给出了一个错误:

重载 swap() 的调用不明确

如何删除此错误?

问题using namespace std; .你几乎不应该在代码中的任何位置使用此行。一个好的方法是只对所有std名称进行质量处理,即写std::cout << "Swapper!" << std::endl;而不是cout << "Swapper!" << endl;

在这种特殊情况下,您自己的swap函数与std::swap冲突,您可以通过<iostream>间接获得。虽然std::swap保证存在于<algorithm><utility>中,但所有C++标准标头都允许拉入任何其他C++标准标头。

因此,一旦包含任何标准标头,using namespace std;就会与std中的所有名称产生潜在冲突。

您应该删除using namespace std;,因为此命名空间已包含一个名为 swap 的函数,并且编译器不知道该选择哪一个。老实说,你真的不需要自己写这样的函数,它已经为你完成了。

另一种方法是将您的函数重命名为 swap 以外的名称。