[英]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
記錄結果”。 如果QStringList
像QVector
一樣具有resize(int)
,我們可以改用aggregate.begin()
。
一元函數有點棘手,因為需要將其轉換為std::bind
/ std::mem_fn
正在執行的一元函數。 如果您使用的是C ++ 11,則可以改用lambda。
同樣從上一個問題開始,@ SingerOfTheFall的評論是有效的:
我還發現將交易保存在產品內部有點奇怪。 更好的設計是使用一個單獨的類來存儲它們。
如果保持這種設計,應重命名Transaction Product::at(int)
和int Product::size()
以使與Transaction
的鏈接明確,如getTransaction
和getNumberOfTransactions
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.