从汇编的眼光看C++(之泛型编程)(二)

2014-11-24 12:43:51 · 作者: · 浏览: 1
2

0040148F lea ecx,[ebp-14h]

00401492 call @ILT+25(type::type) (0040101e)

00401497 mov dword ptr [ebp-4],0

0040149E push 1

004014A0 lea ecx,[ebp-10h]

004014A3 call @ILT+25(type::type) (0040101e)

004014A8 mov byte ptr [ebp-4],1

273: bubble_sort (t, 2, type_compare);

004014AC push offset @ILT+20(type_compare) (00401019)

004014B1 push 2

004014B3 lea eax,[ebp-14h]

004014B6 push eax

004014B7 call @ILT+50(bubble_sort) (00401037)

004014BC add esp,0Ch

274: return;

004014BF mov byte ptr [ebp-4],0

004014C3 lea ecx,[ebp-10h]

004014C6 call @ILT+5(type::~type) (0040100a)

004014CB mov dword ptr [ebp-4],0FFFFFFFFh

004014D2 lea ecx,[ebp-14h]

004014D5 call @ILT+5(type::~type) (0040100a)

275: }

272: type t[2] = {type(2), type(1)};

0040148D push 2

0040148F lea ecx,[ebp-14h]

00401492 call @ILT+25(type::type) (0040101e)

00401497 mov dword ptr [ebp-4],0

0040149E push 1

004014A0 lea ecx,[ebp-10h]

004014A3 call @ILT+25(type::type) (0040101e)

004014A8 mov byte ptr [ebp-4],1

273: bubble_sort (t, 2, type_compare);

004014AC push offset @ILT+20(type_compare) (00401019)

004014B1 push 2

004014B3 lea eax,[ebp-14h]

004014B6 push eax

004014B7 call @ILT+50(bubble_sort) (00401037)

004014BC add esp,0Ch

274: return;

004014BF mov byte ptr [ebp-4],0

004014C3 lea ecx,[ebp-10h]

004014C6 call @ILT+5(type::~type) (0040100a)

004014CB mov dword ptr [ebp-4],0FFFFFFFFh

004014D2 lea ecx,[ebp-14h]

004014D5 call @ILT+5(type::~type) (0040100a)

275: } 我们看到了,简单的排序已经完成了,函数最终会调用bubble_sort函数。泛型虽然复杂,涉及到了函数指针、算术符重载、模板函数等知识,但是只要勇于尝试,就会使用越来越方便,越来越顺手。

问题:

(1) 大家可以尝试编写一个insert_sort的泛型函数?

(2)尝试编写一个二分法的泛型处理函数?

(3)尝试编写一个quick_sort的泛型函数,可能考虑的因素需要多一些?不过也可以尝试一下哦。