对于一个小测试,我想用一些使用C++存储为QString的令牌初始化一个QSet。在C++中有没有一种简单的方法来做这样的事情?
#include <iostream>
#include <QSet>
#include <QString>
const QString TK_IDENT = "ID";
const QString TK_DESC = "DESC";
const QString TK_SPEC = "SPEC";
// THIS STUFF AS A ONELINER
const QSet<QString> TOKEN(TK_IDENT, TK_DESC, TK_SPEC);
int main(int argc, char *argv[]) {
bool NOK = TOKEN.contains("TEST");
bool OK = TOKEN.contains("IDENT");
std::cout << NOK << std::endl;
std::cout << OK << std::endl;
return 0;
}发布于 2016-12-18 20:57:51
如果您很不幸,并且没有支持C++11的环境,您可以创建一个列表
const QSet<QString> TOKEN = QSet<QString>::fromList(QStringList() << TK_IDENT << TK_DESK << TK_SPEC);发布于 2016-12-20 01:39:09
还要注意,标记应该是QString字面值,以免过早地悲观代码。QStringLiteral就是它在盒子上所说的:一种机制,它使用编译器在编译时生成QString的内部数据结构,而不是在运行时经历utf8到utf16的转换和字符串实例化:
const auto TK_IDENT = QStringLiteral("ID");
const auto TK_DESC = QStringLiteral("DESC");
const auto TK_SPEC = QStringLiteral("SPEC");
const QSet<QString> TOKEN{TK_IDENT, TK_DESC, TK_SPEC};https://stackoverflow.com/questions/41203784
复制相似问题