说我有以下课程:
class test {
A a;
B b;
C c;
public:
test(A const& a_in, B const& b_in, C const& c_in) : a(a_in), b(b_in), c(c_in){}
}
现在,如果构造函数的任何参数都是右值引用,那么我显然想使用移动语义而不是复制。但是,由于每个参数可能(也可能不会)作为右值引用传递,这意味着我将不得不编写八个不同的构造函数,每个右值引用的可能组合之一:
class test {
A a;
B b;
C c;
public:
test(A const& a_in, B const& b_in, C const& c_in) : a(a_in), b(b_in), c(c_in){}
test(A const& a_in, B const& b_in, C &&c_in) : a(a_in), b(b_in), c(c_in){}
test(A const& a_in, B &&b_in, C const& c_in) : a(a_in), b(b_in), c(c_in){}
test(A const& a_in, B &&b_in, C &&c_in) : a(a_in), b(b_in), c(c_in){}
test(A &&a_in, B const& b_in, C const& c_in) : a(a_in), b(b_in), c(c_in){}
test(A &&a_in, B const& b_in, C &&c_in) : a(a_in), b(b_in), c(c_in){}
test(A &&a_in, B &&b_in, C const& c_in) : a(a_in), b(b_in), c(c_in){}
test(A &&a_in, B &&b_in, C &&c_in) : a(a_in), b(b_in), c(c_in){}
}
即使只是三个参数,这也已经是一团糟。有更好的方法吗?