我經常發現自己正在爲有許多成員變量的類編寫單調乏味的移動構造函數。他們看起來像下面這樣:委託給默認的移動構造函數
A(A && rhs) :
a(std::move(rhs.a)),
b(std::move(rhs.b)),
c(std::move(rhs.c)),
d(std::move(rhs.d)) {
some_extra_work();
}
也就是說,他們執行所有與默認移動構造函數相關的動作,然後一些[執行額外平凡的任務。理想情況下,我將委託給默認的移動構造函數,然後執行額外的工作,但是定義我自己的移動構造函數的行爲阻止了默認實現的定義,這意味着沒有什麼可委派給。
有沒有一種很好的方法來解決這種反模式?
很難對這種抽象的層面說,但也許你可以分開'A'分爲兩大類,把一個到另一個?一個會有所有的默認構造函數,另外一個會執行'some_extra_work'。檢查*規則零*。 – zch
不知道這是否適用,但會像'A(A && rhs,int):A(rhs){}'不起作用? – Damon
具有默認移動構造函數的中間基類可能會有所幫助。 –