【问题标题】:Static function to convert QList of different types to QString将不同类型的QList转换为QString的静态函数
【发布时间】:2015-08-21 11:25:03
【问题描述】:

我有一个包含字符串、整数、双精度和日期值的 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;
}

【问题讨论】:

  • 您如何将stringintdoubledate 准确地存储在same 列表中?列表的类型是什么?
  • QVariantList 具有内部函数 toStringList 例如。
  • @peppe QList 属于类类型并初始化为类成员变量。
  • IMO 你没有提供足够的信息。你的代码看起来不错,我不明白你为什么需要一些“静态”的东西(你没有描述什么应该是静态的,如果是静态方法类那么你的要求是愚蠢的)。从你所拥有的和你想要达到的目标开始。我怀疑您的问题是其他问题,您尝试通过将某些内容设为静态来解决它,并且您要求我们解决您的解决方案,而不是描述您的问题是什么中继
  • 您需要显示您存储在QList 中的值类型的声明。没有可以重复使用的函数,但自己实现却是小菜一碟。

标签: c++ qt qstring qlist


【解决方案1】:

注意事项:

  • 我假设 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 将使用Transaction::toString() 转换每个m_transactions 元素,并将结果放入aggregate

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

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


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

我还觉得在产品内部保存交易有点奇怪。一种 更好的设计是有一个单独的类来存储它们。

如果您保留此设计,Transaction Product::at(int)int Product::size() 应重命名,以使带有 Transaction 的链接明确,例如 getTransactiongetNumberOfTransactions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2019-01-27
    相关资源
    最近更新 更多