一 不依赖类模板型参数
- 不依赖模板参数也就是任何采用该类模板生成的模板类都拥有一个通用的数据类型的成员而不受到模板参数的影响
1.1 原始类模板
- 首先我们需要定义一个模板类,这个静态成员s_int不会受到模板参数的影响。
- 值得注意的是,由于是静态成员我们必须初始化。
template<typename T>
class A
{
public:
static int s_int;
};
template<typename T>
int A<T>::s_int = 20; // 由于是静态成员必须初始化否则编译不会通过
1.1 特化版
- 我们也可以对这种类模板进行特化,这样做的好处是,针对某个特化过的数据类型的值做设置。
- 特化前也仍需要注意一定要定义原始的类模板
二 依赖模板类型参数
- 对于与模板类型参数相关的静态成员变量,虽然我们也可以直接定义一个通用的类型实现,但是对于静态成员比那里
2.1 原始类模板
- 当我们实现这样一个依赖模板参数的静态成员变量时,由于我们需要初始化这个成员变量,比如像下面我们初始化为int那么此时有很类型将不能使用这个类模板来创建类了,因为这个int值会限制很多类型不被允许创建。
template<typename T>
class A
{
public:
static T s_int;
};
template<typename T>
T A<T>::s_int = 20;
2.2 特化版
- 特化版其实也就是明确指定了某种类型的静态成员变量的值。
template<typename T>
class A
{
public:
static T s_int;
};
template<>
QString A<QString>::s_int = "20";