[英]Static function to convert QList of different types to QString
我有一个包含字符串,整数,双精度和日期值的QList。 我想将QList转换为QString并在QString返回函数中将其返回。 我可以使用静态功能吗?或者我在这里缺少什么? 我当前的代码:
QString Product::toString()
{
QStringList listString;
QString outString;
for(int i =0; i < size(); i++)
{
listString << at(i)->toString();
}
outString = listString.join("\n");
return outString;
}
笔记:
考虑到先前的问题,我假设Product::at(int)
返回一个Transaction
。
我还假设OP在写“静态”时的意思是“内置”
该for
可以使用内置的功能被移除。 有些人(很多?)会发现新语法难以理解。
QString Product::toString()
{
QStringList aggregate;
std::transform(m_transactions.begin(),
m_transactions.end(),
std::back_inserter(aggregate),
std::bind(std::mem_fn(&Transactions::toString), std::placeholders::_1));
// or : [](const Transaction& transaction){ return transaction.toString(); });
return aggregate.join("\n");
}
std::transform
将改变每一m_transactions
使用要素Transaction::toString()
,并将结果放到aggregate
。
std::back_inserter
意思是“使用QStringList::push_bask
记录结果”。 如果QStringList
像QVector
一样具有resize(int)
,我们可以改用aggregate.begin()
。
一元函数有点棘手,因为需要将其转换为std::bind
/ std::mem_fn
正在执行的一元函数。 如果您使用的是C ++ 11,则可以改用lambda。
同样从上一个问题开始,@ SingerOfTheFall的评论是有效的:
我还发现将交易保存在产品内部有点奇怪。 更好的设计是使用一个单独的类来存储它们。
如果保持这种设计,应重命名Transaction Product::at(int)
和int Product::size()
以使与Transaction
的链接明确,如getTransaction
和getNumberOfTransactions
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.