正在将std::wstring转换为const wchar_t x[]

Casting std::wstring to const wchar_t x[]

本文关键字:wchar const std wstring 转换      更新时间:2023-10-16

我有以下代码:

void get_id(int i, std::vector<item>& _items) {
    auto cpool = get_db_connection_pool();
    auto con = cpool->get_connection();
    db::result m;
    int _id;
    if (i == 1) {               
        const wchar_t sql[] = LR"***(
            SELECT * FROM TABLE1                    
        )***";
        db::statement st(con, sql);
        m = st.execute().into(_id);
        while (m.move_next()) {                 
            _items.push_back(item {_id});
        }
    }
    else {
        const wchar_t sql[] = LR"***(
            SELECT * FROM TABLE2                    
        )***";
        db::statement st(con, sql);
        m = st.execute().into(_id);
        while (m.move_next()) {                 
            _items.push_back(item {_id});
        }
    }
}

正如你所看到的代码

        db::statement st(con, sql);
        m = st.execute().into(_id);
        while (m.move_next()) {                 
            _items.push_back(item {_id});
        }

在if-else语句中重复写入。我想把这个部分移到其他情况之外,比如:

void get_id(int i, std::vector<item>& _items) {
    auto cpool = get_db_connection_pool();
    auto con = cpool->get_connection();
    db::result m;
    int _id;
    if (i == 1) {               
        const wchar_t sql[] = LR"***(
            SELECT * FROM TABLE1                    
        )***";
    }
    else {
        const wchar_t sql[] = LR"***(
            SELECT * FROM TABLE2                    
        )***";
    }

    db::statement st(con, sql);
    m = st.execute().into(_id);
    while (m.move_next()) {                 
        _items.push_back(item {_id});
    }
}

我已经尝试用临时std::wstring替换if-else情况下的sql[],但我不知道如何将std::wstring强制转换为const wchar_t sql[]

std::wstring有一个成员函数c_str,它将向底层字符串返回一个const wchar_t*。只要db::statementconst wchar_t []const wchar_t *,就可以使用

std::wstring sql;
if (i == 1) {               
    sql = LR"***(
        SELECT * FROM TABLE1                    
    )***";
}
else {
    sql = LR"***(
        SELECT * FROM TABLE2                    
    )***";
}
db::statement st(con, sql.c_str());