Представьте, что у вас есть несколько перегруженных методов, которые (до С++ 11) выглядели следующим образом:
class MyClass {
public:
void f(const MyBigType& a, int id);
void f(const MyBigType& a, string name);
void f(const MyBigType& a, int b, int c, int d);
// ...
};
Эта функция делает копию a
(MyBigType
), поэтому я хочу добавить оптимизацию, предоставив версию f
, которая перемещает a
вместо копирования.
Моя проблема в том, что теперь число перегрузок f
будет дублироваться:
class MyClass {
public:
void f(const MyBigType& a, int id);
void f(const MyBigType& a, string name);
void f(const MyBigType& a, int b, int c, int d);
// ...
void f(MyBigType&& a, int id);
void f(MyBigType&& a, string name);
void f(MyBigType&& a, int b, int c, int d);
// ...
};
Если бы у меня было больше параметров, которые можно было бы переместить, было бы нецелесообразно предоставлять все перегрузки.
Кто-нибудь справился с этой проблемой? Есть ли хорошее решение/шаблон для решения этой проблемы?
Спасибо!