概述
template< class T, class container = vector<t> >
class MyClass;
MyClass<int> x1; // 相当于MyClass< int, vector<int> >
template<class T>
class MyClass
{
typename T::SubType * ptr;
...
};
如果没有typename, SubType会被当成是一个static成员,于是T::SubType * ptr是两数乘积
SubType成员一个型别的条件:任何一个用来取代T的型别,其内都必须提供一个内部型别SubType的定义。
【例子】
MyClass<Q> x;
Class Q{
typedef int SubType; // 必须带有SubType型别
};
或者
class Q{
class SubType;
...
};
【成员模板】
class MyClass{
...
template<class T>
void f(T);
};
适用于任何型别参数
template<class T>
class MyClass{
private:
T value;
public:
void assign(const MyClass<T>& x){
value = x.value; // 这里是因为*this和MyClass<T>也就是参数的类型一模一样,所以可以直接访问private数据
}
...
};
注意:assign里面的型别必须和声明对象中的型别一模一样!
int i1;
int i2 = int(); // 初始化为0,显式初始化
用在模板上:
template <class T>
void f()
{
T x = T();
...
}
【异常处理】
【命名空间】
与class不同的是namespaces是开放
【杂项】
explicit禁止用于自动型别转换。也就是禁止隐式转换。
【C++型别转换操作符】
static_cast、dynamic_cast、const_cast、renterpret_cast
最后
以上就是甜美战斗机为你收集整理的【C++标准程序库】第二章的全部内容,希望文章能够帮你解决【C++标准程序库】第二章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复