比较讨厌模板,所以都不希望整个类都感染,只让部分函数有模板功能。
这里主要是通过第44行将一个模板函数指针转化给一个通用的类指针保存,然后在线程里面通过类对象将该对象绑定的CB在线程里面使用。
1 class mwProData { 2 public: 3 template <typename T> 4 int32_t CreateData( 5 ... 6 void (*callback)(const T &dat)); 7 8 void* GetCallBack(void) { 9 return m_pCallBack; 10 } 11 12 template <typename T> 13 void WaitSet(void (*callback)(const T &dat)); 14 15 private: 16 ... 17 void *m_pCallBack; 18 }; 19 20 template <typename T> 21 void *__MW_DATAREAD_RunData(void *arg) 22 { 23 pthread_detach(pthread_self()); 24 mwProData *pReader = (mwProData *)arg; 25 26 void *pCb = pReader->GetCallBack(); 27 if (pCb == NULL) { 28 printf("mwProData::GetCallBack() return NULL\n"); 29 return NULL; 30 } 31 32 pReader->WaitSet<T>((void (*)(const T&))pCb); 33 34 return NULL; 35 } 36 37 template <typename T> 38 int32_t mwProData::CreateData( 39 ... 40 void (*callback)(const T &dat)) 41 { 42 pthread_t tid; 43 ... 44 this->m_pCallBack = (void *)callback; 45 pthread_create(&tid, NULL, __MW_DATAREAD_RunData<T>, (void *)this); 46 ... 47 }
原文:https://www.cnblogs.com/sciapex/p/14329646.html