template<class _Ty>
void (*mem_fun_thread_t(void (_Ty::* mem_fun)()))(void*){
union{
void (*_start_address)(void*);
void (_Ty::* _mem_fun)();
}thread_func;
thread_func._mem_fun = mem_fun;
return thread_func._start_address;
}
#include "stdafx.h"
#include <string>
#include <iostream>
#include <conio.h>
#include <process.h>
using namespace std;
class Hello
{
public:
Hello(const std::string& name):m_name(name){
}
~Hello(){
}
void run(){
cout << "Hello " << m_name << endl;
}
private:
std::string m_name;
};
template<class _Ty>
void (*mem_fun_thread_t(void (_Ty::* mem_fun)()))(void*){
union{
void (*_start_address)(void*);
void (_Ty::* _mem_fun)();
}thread_func;
thread_func._mem_fun = mem_fun;
return thread_func._start_address;
}
int _tmain(int argc, _TCHAR* argv[])
{
Hello hello("world");
_beginthread(mem_fun_thread_t(&Hello::run), 0, &hello);
_getch();
return 0;
}