簡體   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