摘要:
template <typename T> class CDestructor; template <typename T1, typename T2> class CDestructor<T1 (*)(T2)> //模板特化,这里类型 T 特化为一个函数指针 T1(*)(T2),改函数参数一个为T2,返回类型为T1 { public: typedef T1 (*FuncPtr)(T2); CDestructor(FuncPtr fp, T2 param):m_ptr(fp), m_param(param) {}; ... 阅读全文
摘要:
__cdecl与__stdcall这两种调用约定之间的主要差别在于由谁来执行对参数的清理工作。如果是__cdecl,那么主调函数将负责执行清理工作,如果是__stdcall那被调函数将负责执行清理。通常,我们倾向于使用__stdcall,它能够减少生成代码的规模。因为不需要每次调用时,都在返回后对esp进行操作,比如add esp, 0Ch.(抵消三个参数的大小)__cdecl存在的意义是?支持变长数量的参数。调用约定参数传递栈的清理工作函数名修饰stdcall右到左被调函数函数名字前加"_",并且在后面增加'@'以及栈空间所需要的字节数cdecl右到左主调 阅读全文