假设有以下声明:
template <typename T> struct MyTemplate;
下面关于部分特化的定义似乎使用同一个字母
T
来指代不同的类型。template <typename T> struct MyTemplate<T*> {};
例如,让我们来看一个具体的实例:
MyTemplate<int *> c;
现在,请再次考虑上述偏特化定义:
对于类模板的偏特化,它是一种在给定部分类型参数时,对原始类模板进行专门设计和优化的技术。
template <typename T> struct MyTemplate<T*> {};
在这行代码的第一部分(即
template <typename T>
)中,T
是int *
。在这行代码的第二部分(即MyTemplate<T*>
)中,T
是int
!那么,如何阅读这个偏特化的定义呢?
T *
中的T
替换为int
,你就得到了int *
。 - Potatoswatterint foo(int a)
,void bar(int a)
和void foobar(std::string&a)
中的a
不是同一个。 - Jarod42T(T)
,它会被解析为int *(int)
... 我已经编辑了问题以强调这一点。 - AlwaysLearning