[英]How to modify elements of a QSet?
我有QSet<QuadPattern> texture;
我想在循環中修改所有QuadPattern。
foreach
不是一個好的解決方案,因為它可以復制。
使用此代碼:
QMutableSetIterator<QuadPattern> it(texture); while (it.hasNext()) { it.next(); it.value().setCoordinate(...)); }
我收到編譯錯誤:
error: C2662: 'QuadPattern::setCoordinate' : cannot convert 'this' pointer from 'const QuadPattern' to 'QuadPattern &'
Conversion loses qualifiers
函數setCoordinate
是這樣的:
inline void setCoordinate(const std :: pair&value){_ unsordinate = value; }
為什么這個錯誤?
錯誤是因為您嘗試修改QMutableSetIterator::value()
函數返回的const對象。
我相信你不能以這種方式修改你的集合項目,因此沒有這樣的API。 修改所有項目所需的只是清除集合並再次插入新項目。
QMutableSetIterator::value()
返回const引用是有充分理由的。 集合中的項目根據其哈希值在內部編制索引。 如果您想要更改項目,通常需要刪除並重新插入該項目。 如果您希望避免復制數據,請將QuadPattern
隱式共享類:
class QuadPatternData : public QSharedData
{
...
};
class QuadPattern {
QSharedDataPointer<QuadPatternData> d;
public:
QuadPattern() : d(new QuadPatternData) {}
QuadPattern(const QuadPattern & other) : d(other.d) {}
QuadPattern(QuadPattern && other) { d.swap(other.d); }
void setCoordinate( ... ) { d->coordinate = ...; }
...
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.