2010-10-29 120 views
0

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

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; 
} 
+2

就这样你知道:反引号语法是用于内联代码的。如果要格式化代码块,请将每行缩进四个空格。 http://daringfireball.net/projects/markdown/ – 2010-10-29 03:08:37

+0

模板类可以是专门的(部分或完全) – Anycorn 2010-10-29 03:09:07

+0

@Jonathan Sterling,谢谢你的提示。我如何缩进4个空格的块代码?看来整个块的标签不起作用。有没有捷径可以做到这一点?或者我需要逐行插入空格? – Thomson 2010-10-29 03:14:53

回答

5

不,这是不允许的。相反,类模板可以是专业化的(包括部分专业化)。这几乎达到了超载的效果(仅针对函数)

请注意,模板参数无法从构造函数参数中推导出来。

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 
} 
相关问题