簡體   English   中英

如何使用 sqlite3_exec function 的第 4 個參數?

[英]How to work with the 4th argument of the sqlite3_exec function?

我想將一個std::list傳遞給我的回調 function。我知道我必須在我的回調 function 中使用void* ,但是在使用void* * 時我該如何將對象插入到我的列表中?

//function will insert to a list of albums (data) a new album
int callbackAlbums(void* data, int argc, char** argv, char** azColName)
{
    Album album;
    
    for(int i = 0; i < argc; i++)
    {
        if (std::string(azColName[i])) == "NAME")
        {
            album.setName(std::string(argv[i]));
        }
        else if (std::string(azColName[i])) == "CREATION_DATE")
        {
            album.setCreationDate(std::string(argv[i]));
        }
        else if (std::string(azColName[i])) == "USER_ID")
        {
            album.setOwner(atoi(argv[i]));
        }
    }
    
    data.push_back(album);
    return 0;
}
//function will return a list of all albums.
const std::list<album> DatabaseAccess::getAlbums()
{
    const char* sqlStatement = "SELECT * FROM ALBUMS;";
    std::list<Album> albums;
    char* errMessage = "";
    int res = sqlite3_exec(this->_db, sqlStatement, callbackAlbums, (void*)&albums, &errMessage);
}

我嘗試將回調 function 中的void*更改為std::list<Album>並期望sqlite3_exec()與該回調 function 一起工作。

您已經知道如何將list*轉換為void* (順便說一句,顯式轉換是多余的)。 只需在回調中做相反的轉換,例如:

int callbackAlbums(void* data, int argc, char** argv, char** azColName)
{
    Album album;
    ...
    std::list<Album>* albums = (std::list<Album>*)data;
    albums->push_back(album);
    ...
}

並且不要忘記從getAlbums()實際return您的std::list

const std::list<album> DatabaseAccess::getAlbums()
{
    std::list<Album> albums;
    ...
    int res = sqlite3_exec(..., callbackAlbums, &albums, ...);
    ...
    return albums;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM