Я часто нахожу, что я писал утомительные конструкторы перемещения для классов со многими переменными-членами. Они выглядят примерно так:
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();
}
То есть они выполняют все действия, связанные с конструктором перемещения по умолчанию, а затем формируют какую-то обыденную дополнительную задачу. В идеале я бы делегировал конструктору перемещения по умолчанию, а затем выполнял дополнительную работу, однако действие по определению моего собственного конструктора перемещения предотвращает определение реализации по умолчанию, то есть там нечего делегировать.
Есть ли хороший способ обойти этот анти-шаблон?