繁体   English   中英

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

[英]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记录结果”。 如果QStringListQVector一样具有resize(int) ,我们可以改用aggregate.begin()

一元函数有点棘手,因为需要将其转换为std::bind / std::mem_fn正在执行的一元函数。 如果您使用的是C ++ 11,则可以改用lambda。


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

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

如果保持这种设计,应重命名Transaction Product::at(int)int Product::size()以使与Transaction的链接明确,如getTransactiongetNumberOfTransactions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM