我以前写线程时要么老老实实照著声明写,要么使用C++类的静态成员函数来作为回调函数和普通函数,经常会因为线程代码而破坏封装.之前虽然知道类成员函数的展开形式但從没想过利用过它,昨天看深入ATL时无意中学会了这一招:)
union { // 联合类用于转换类成员方法指针到普通函数指针(试过编译器不允许在这两种函數之间强制转换),不知道有没有更好的方法 } Proc; // 尽管联合里的两种函数类型现在看起来有很大不同,但它们的最终形式是相同的
其实不圵线程回调函数和普通函数,其实只要是形如Func(void*,...)的回调函数和普通函数都可以用这种方法直接使用类成员方法(前提是第一个void*是自定义数据,也就是说它不能有其它功能)