c++ - 将不同类型的QList转换为QString的static 函数

  显示原文与译文双语对照的内容
0 0

我有一个 QList,它包含字符串,int,double和日期值。 我希望将QList转换为QString并在QString返回函数中返回它。 这里有 static 函数我这里有什么? 我的当前代码:


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

  • 我也假设"内置"在他或者她写"static"的时候"

可以使用内置函数删除 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 将使用 Transaction::toString() 转换每个 m_transactions 元素,并将结果放入 aggregate 中。

std::back_inserter 表示"使用 QStringList::push_bask 记录结果"。 如果 QStringList 有一个像 QVector 这样的resize(int),我们可以使用 aggregate.begin()

一元函数有点复杂,因为它需要转换成一元函数,std::bind/std::mem_fn 正在进行。 如果使用 C++11,则可以使用 lambda 。


同样,在前面的问题中,@SingerOfTheFall's 注释是有效的:

我还发现在产品内部保存交易有点奇怪。 一个更好的设计是有一个单独的类可以存储它们。

如果保留这个设计,Transaction Product::at(int)int Product::size() 应该被重命名为带有 Transaction的链接,如 getTransactiongetNumberOfTransactions

...