五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

(已解決)模板類的函數(shù)指針與普通函數(shù)指針轉化的問題

2021-05-28 13:46 作者:曉舟_ZhouSensor  | 我要投稿

問題

想在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)指針
更新靜態(tài)指針

在更新靜態(tài)指針這里報錯了,無法將類函數(shù)指針轉化為靜態(tài)指針,不知如何解決。


方法2:用std::function和std::bind實現(xiàn)相同功能

用function定義了一個函數(shù)指針
用bind更新函數(shù)指針

這次函數(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ù)就行

嘗試了一下果然成功了?。?/figcaption>
暴力轉化為THIS

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


(已解決)模板類的函數(shù)指針與普通函數(shù)指針轉化的問題的評論 (共 條)

分享到微博請遵守國家法律
西贡区| 安徽省| 高州市| 定安县| 陆河县| 林西县| 图们市| 开远市| 遂昌县| 临桂县| 海南省| 邹平县| 凤翔县| 莱西市| 宁明县| 奉贤区| 湟源县| 溆浦县| 宾川县| 和平县| 齐齐哈尔市| 错那县| 开封县| 徐闻县| 台南县| 汝阳县| 望奎县| 南丰县| 广水市| 运城市| 行唐县| 乐东| 方城县| 林口县| 子长县| 南投县| 柘荣县| 偏关县| 莱芜市| 隆尧县| 盈江县|