// ============================================================================ // p1c05_04 — 5.6模板的局限性 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; // --- 原文片段 [58954472:3] 5.6模板的局限性 --- class Person { public: Person(string name, int age) { this->mName = name; this->mAge = age; } string mName; int mAge; }; //普通交换函数 template void mySwap(T &a,T &b) { T temp = a; a = b; b = temp; } //第三代具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型 //具体化优先于常规模板 template<>void mySwap(Person &p1, Person &p2) { string nameTemp; int ageTemp; nameTemp = p1.mName; p1.mName = p2.mName; p2.mName = nameTemp; ageTemp = p1.mAge; p1.mAge = p2.mAge; p2.mAge = ageTemp; } void test() { Person P1("Tom", 10); Person P2("Jerry", 20); cout << "P1 Name = " << P1.mName << " P1 Age = " << P1.mAge << endl; cout << "P2 Name = " << P2.mName << " P2 Age = " << P2.mAge << endl; mySwap(P1, P2); cout << "P1 Name = " << P1.mName << " P1 Age = " << P1.mAge << endl; cout << "P2 Name = " << P2.mName << " P2 Age = " << P2.mAge << endl; } // --- main --- int main() { test(); return 0; }