私が正しければ適合し、より良い解決策があるかどうか教えてください:
のような定数メンバーを持つオブジェクトint const width;
は、コンパイラによって暗黙的に作成される合成代入演算子では処理できないことを理解しています。しかし、QList(そして私はstd :: listもそうだと思います)には、実用的な代入演算子が必要です。したがって、定数メンバーとQListを持つオブジェクトを使用する場合、次の3つの可能性があります。
- 定数メンバーは使用しないでください。(解決策ではありません)
- 自分の代入演算子を実装します。
- 代入演算子を必要としない他のコンテナを使用する
あれは正しいですか?他にエレガントな解決策はありますか?
また、私は私ができるかどうか疑問に思います:
- (4)コンパイラに定数メンバーを処理する代入演算子を作成させます!(なぜこれがそんなに大きな問題なのかわかりません。なぜオペレーターは初期化リストを内部で使用するのに十分な知性を持っていないのですか?それとも何かが足りないのですか?)
- (5)リストで代入演算を使用しないことをQListに伝えます。
編集:私はこのクラスのオブジェクトを自分で割り当てることはありません。これらは、コピーコンストラクターまたはオーバーロードされたコンストラクターによってのみ作成されます。したがって、代入演算子は、私自身ではなく、コンテナによってのみ必要とされます。
EDIT2:これは私が作成した代入演算子です。それが正しいかどうかはわかりませんが。Cellには2つのパラメーターコンストラクターがあります。これらのパラメーターは、初期化リストを使用して2つの定数メンバーを設定します。ただし、オブジェクトには他の変数(非const)メンバーも含まれています。
Cell& Cell::operator=(Cell const& other)
{
if (this != &other) {
Cell* newCell = new Cell(other.column(), other.row());
return *newCell;
}
return *this;
}
EDIT3:私はこのスレッドをほぼ同じ質問で見つけました:C ++:constクラスメンバーとのSTLトラブルすべての答えを組み合わせて私の質問に答えました。