(已解決)模板類的函數(shù)指針與普通函數(shù)指針轉化的問題
問題
想在c++寫一個template?class,?目的是可以讓任意結構體直接對應數(shù)據(jù)庫的數(shù)據(jù),方便同步和操作數(shù)據(jù)庫。
目前遇到的問題是,sqlite的讀取數(shù)據(jù)api,是使用的callback。
因為callback必須是一個全局函數(shù),不能將類(模板類)中的函數(shù)給到callback。
但因為被callback的功能中,必須將數(shù)據(jù)放入對應的模板結構體中,所以必須要從模板處獲取結構體類型,導致這個被callback的函數(shù)必須在類模板中……

初步的想法
既然callback只能傳遞全局函數(shù),就用static在class里聲明一個靜態(tài)函數(shù)指針,在準備callback之前,更新指針到該類的實現(xiàn)函數(shù)上,從而進行callback。

又遇到問題
方法1:聲明靜態(tài)函數(shù)指針,在調用callback前將當前類的函數(shù)指針更新到靜態(tài)指針上


在更新靜態(tài)指針這里報錯了,無法將類函數(shù)指針轉化為靜態(tài)指針,不知如何解決。
方法2:用std::function和std::bind實現(xiàn)相同功能


這次函數(shù)指針更新是成功了,但引起另一個報錯的是sqlite3_exec的callback,無法將function轉化為普通的函數(shù)指針……
emmmmmmm
還不知道怎么解決

已解決20210528
非常感謝?kotono 和?Phynon 的回復,并且kotono給出了正確的解決方案,太神啦!
Phynon
成員函數(shù)不允許賦值給普通函數(shù)指針吧
kotono
這個是沒有辦法轉化的
pointer?to?member?function和pointer?to?function基本是兩個東西,而std::function也無法轉化成函數(shù)指針
這種情況一般的處理方式是讓一個非成員函數(shù)統(tǒng)一處理回調,用收到的參數(shù)再去調對應的對象
C的回調一般會有一個void*的參數(shù)用來干這個事情的
我
確實是有,但又存在問題……
因為模板類是不知道模板參數(shù)是什么,所以回調函數(shù)收到類指針,也不知道要轉化成什么模板類
kotono
這個不是問題吧,應該直接轉成T就行
不用全局函數(shù),而是用你?data<T>?的一個static函數(shù)就行


原來模板內(nèi)的靜態(tài)函數(shù)是可以直接獲取到T的內(nèi)容的,所以直接在模板內(nèi)強制轉換指針就可以實現(xiàn)對當前類成員的訪問了!