处理左值和右值引用的所有可能组合

时间:2018-09-04 00:27:41

标签: c++ move-semantics rvalue-reference

说我有以下课程:

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){}
}

即使只是三个参数,这也已经是一团糟。有更好的方法吗?

0 个答案:

没有答案