对于一个小测试,我想初始化一个QSet,其中一些令牌使用C ++存储为QString。有没有一种简单的方法在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;
}
答案 0 :(得分:4)
当你查看QSet的文档时,你会发现它有一个std::initializer_list
的ctor。因此,使用统一初始化语法,写:
const QSet<QString> TOKEN{TK_IDENT, TK_DESC, TK_SPEC};
由于这些是C ++ 11特性,因此您需要一个C ++ 11编译器。此外,必须相应地编译Qt。据我记得,在Qt 4.8 5.1中添加了initializer_list ctors。 (更新:Igor的评论是正确的:像QStringList
这样的类在4.8中获得了它们的初始列表ctor,QSet
在5.1中获得了它。)
答案 1 :(得分:3)
如果您不幸并且没有支持C ++ 11的环境,您可以创建一个列表
import breeze.linalg.{DenseMatrix, inv}
val mx = new DenseMatrix(a1, b1, x.transpose.flatten)
val my = new DenseMatrix(a2, b2, y.transpose.flatten)
mx * inv(my)
答案 2 :(得分:1)
另请注意,标记应为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};