c++ - 特化和重载有什么区别

标签 c++ templates overloading template-specialization

<分区>

假设我有这段代码:

template <class T> void Swap (T& a, T& b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

有什么区别:

  1. 重载

    void Swap (int& x, int& s)
    {
        //some behavior 
    }
    
  2. 特化

    template<> void Swap <int> (int& x, int& s)
    {
        //some behavior 
    }
    

谁更好?

最佳答案

重载定义了一个同名的方法,如果编译器找到这个重载的方法并且它适合调用它的参数类型,则编译器不会尝试进行模板类型推导。一个简单的调用,例如:

    int a = 1, b = 2;
    Swap(a,b);         // calls the overloaded method

将转到重载方法。

要调用专门的方法,您需要显式地告诉编译器:

    Swap<int>(a,b);    // calls the specialized method

关于c++ - 特化和重载有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22786376/

相关文章:

c++ - 如何处理超过 64 位的位域?

silverlight - 在哪里可以找到好的 Silverlight 应用程序 XAML 模板和主题?

java - Java 中的泛型如何适用于以下程序?

c++ - 每个目标不同的 CMAKE_BUILD_TYPE

C++使用std库在满足条件的 vector 中找到第一个元素

c++ - 请求 Pimpl 框架评论/建议

python - 为自定义数据类型实现 sum()

C++ 通用输出运算符重载

c++ - 从析构函数调用函数或将其提供给 atexit() 之间的区别

c++ - 如何使用非默认构造函数实例化模板类