将不同类型的QList转换为QString的静态函数

Static function to convert QList of different types to QString

我有一个包含字符串、整数、双精度和日期值的 QList。我想将 QList 转换为 QString 并在 QString returning 函数中 return 它。有没有我可以使用的静态函数,或者我在这里缺少什么?我当前的代码:

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 的意思是 "built-in" 当他或她写 "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 表示 "use QStringList::push_bask to record the results"。如果 QStringList 有一个 resize(int)QVector 那样,我们可以用 aggregate.begin() 代替。

一元函数有点棘手,因为它需要转换成一元函数,这就是std::bind/std::mem_fn所做的。如果您使用的是 C++11,则可以改用 lambda。


同样从上一个问题来看,@SingerOfTheFall 的评论是有效的:

I also find it a little odd to save transactions inside of products. A better design would be having a separate class that could store them.

如果保留此设计,Transaction Product::at(int)int Product::size() 应重命名以使 link 和 Transaction 显式显示,如 getTransactiongetNumberOfTransactions.