我有一个包含string,int,double和date值的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;
}
答案 0 :(得分:0)
注意:
我假设Product::at(int)
在前一个问题的情况下返回Transaction
。
我也假设OP意味着&#34;内置&#34;当他或她写下#34;静态&#34;
可以使用内置函数删除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
表示&#34;使用QStringList::push_bask
记录结果&#34;。如果QStringList
的{{1}}类似resize(int)
,我们可以使用QVector
代替。
一元函数有点棘手,因为它需要转换为一元函数,aggregate.begin()
/ std::bind
正在做什么。如果您使用的是C ++ 11,则可以使用lambda。
同样来自上一个问题,@ SingerOfTheFall的评论是有效的:
我还发现在产品中保存交易有点奇怪。一个 更好的设计是拥有一个可以存储它们的单独类。
如果您保留此设计,则应重命名std::mem_fn
和Transaction Product::at(int)
,以明确指出int Product::size()
的链接,例如Transaction
和getTransaction
。