C#からQtに移行する次の一般的なイディオム(C#)を適切に翻訳する方法を理解するのに問題があります。
class Customer {
public property List<Address> Addresses { get; }
}
class AnotherClass {
public void SetAsShipping(List<Address> addresses) {
foreach(var address in addresses)
if (address.IsMatch(_shipping))
address.IsShipping = true; // This is the important part
}
}
var cust = new Customer();
var another = new AnotherClass();
another.SetAsShipping(cust.Addresses);
私は次のC++を持っています:
class Customer {
public:
QList<Address> addresses() const { return _addresses; }
private:
QList<Address> _addresses;
};
class AnotherClass {
public:
void setAsShipping(QList<Address> addresses);
};
AnotherClass::setAsShipping(QList<Address> addresses) {
QList<Address>::iterator address;
for (address = addresses->begin(); address != addresses->end(); ++address)
if (address->isMatch(_shipping))
address->setIsShipping(true); // This is modifying a copy :(
}
Customer cust;
AnotherClass another;
another.setAsShipping(cust.addresses());
_addressesを参照として返し、それを参照で渡すことができることはわかっていますが、_addressesへの参照よりも先にCustomerインスタンスがスコープ外になり、「ぶら下がり参照」が発生する可能性があるため、問題が発生する可能性があります。私は検索からそれだけ多くを見つけました。私が見つけられなかったのは、代わりに何をすべきかということでした。明らかに、この種のことを行うための標準的なC ++の方法がありますが、私の脳はマネージコードモードで立ち往生しているので、私には飛びつきません。アドレスリストをAnotherClassで変更できるようにするには、このコードをどのように記述すればよいですか?