在C++中使用libuv時對回撥的處理 (2)
阿新 • • 發佈:2020-10-05
# 前情簡介
在完成了第一版的《[在C++中使用libuv時對回撥的處理](https://www.cnblogs.com/ink19/p/13618393.html)》之後,在對專案進行開發的時候,還是感覺有一些難受。
因為在實際操作的時候,需要構建一個結構體,並且需要對這個結構體的記憶體進行管理,非常的麻煩。
在對C++的模板程式設計進行簡單的學習後,瞭解到一個比較基本的知識。如果一個值或者型別能在編譯的時候確定,那麼它是一定可以作為模板引數的。
反觀我之前為了完成操作構建的結構體,可以很明顯的發現,成員函式指標那一個變數是一直保持不變的,而且可以在編譯的時候確定,所以是有辦法將成員函式指標放入模板裡面的。
# 解決方案
## 使用回撥的函式
```C++
typedef struct {
void *data;
int s;
} call_back_t;
typedef void (*call_back_func_t)(call_back_t *t, int s, int v);
int call_back_func(call_back_t *t, call_back_func_t func) {
func(t, t->s, 12);
return 0;
}
```
## 回撥函式及其類
```C++
class CallBack {
public:
int a = 0;
void call_back(call_back_t *t, int s, int v) {
std::cout << "t->s:" << t->s << std::endl;
std::cout << "s:" << s << std::endl;
std::cout << "v:" << v << std::endl;
std::cout << "a:" << a << std::endl;
}
};
```
## 解決方案
```C++