正在将std::wstring转换为const wchar_t x[]
Casting std::wstring to const wchar_t x[]
我有以下代码:
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::statement
取const 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());