代码之家  ›  专栏  ›  技术社区  ›  Thomson

是否可以重载模板类?

  •  0
  • Thomson  · 技术社区  · 14 年前

    我发现模板方法可能被重载,我可以在模板类上做同样的事情吗?如果两个模板类匹配一个模板类实例化,我们可以使用构造函数中的参数类型来推断要使用哪个模板类。

    template <typename T>
    class A{
      A(T){}
    };
    
    template <typename T>
    class A{
      A(T*){}
    };
    
    int main(){
      A<int*> a((int*)0);
      A<int> a((int*)0);
      return 0;
    }
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   Chubsdad    14 年前

    不,这是不允许的。相反,类模板可以专门化(包括部分专门化)。这在很大程度上实现了重载的效果(仅用于函数)

    请注意,不能从构造函数参数推导模板参数。

    template<class T> struct X{
       void f(){}
    };
    
    template<class T> struct X<T*>{
       void f(){}
    };
    
    int main(){
       X<int> x;
       x.f();          // calls X<T>::f
    
       X<int *> xs;
       xs.f();         // calls X<T*>::f
    }
    
    推荐文章