C++模板十分强大和和复杂,下面例子仅说明模板默认类型和模板特化
template<typename T=char> class Base { public: void print() { cout<<"hello"<<endl; } }; template<> class Base<char> { public: void print() { cout<<"world"<<endl; } }; int main() { Base<int> tmp; tmp.print(); Base<> tmp1; tmp1.print(); Base<char> tmp2; tmp2.print(); return 0; }
输出:
hello
world
world
结论:
在你创建模板类的对象的地方,编译器会根据你传入的模板参数来实例化模板,如果有默认类型参数,就可以不传,如tmp1;
当编译器准备好所有的类型参数后,它会优先选择符合用户自定义特化模板来进行实例化,否则使用原始模板进行实例化。