最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ù)指針轉化的問題的評論 (共 條)

分享到微博請遵守國家法律
岢岚县| 张家口市| 札达县| 浏阳市| 卢氏县| 泗水县| 新余市| 巩义市| 旌德县| 吉林市| 林州市| 高淳县| 香河县| 金山区| 肃宁县| 泗阳县| 苏尼特左旗| 丁青县| 邮箱| 长子县| 龙岩市| 孝义市| 绍兴市| 泽普县| 巴塘县| 瑞丽市| 民勤县| 上饶市| 大竹县| 铁岭市| 德安县| 柳江县| 茂名市| 黄龙县| 扎鲁特旗| 双柏县| 邢台市| 临沂市| 昌图县| 菏泽市| 长兴县|