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