1

构造函数和复制构造函数如何查找这个可变参数模板类?

struct A {};
struct B {};

template < typename Head,
           typename... Tail>
struct X : public Head,
           public Tail...
{
    X(int _i) : i(_i) { }

    // add copy constructor

    int i;
};

template < typename Head >
struct X<Head> { };

int main(int argc, const char *argv[])
{
    X<A, B> x(5);
    X<A, B> y(x);

    // This must not be leagal!
    // X<B, A> z(x);

    return 0;
}
4

1 回答 1

1
template < typename Head,
           typename... Tail>
struct X : public Head,
           public Tail...
{
    X(int _i) : i(_i) { }

    // add copy constructor
    X(const X& other) : i(other.i) {}

    int i;
};

在模板类内部,X作为类型意味着X<Head, Tail...>,并且所有X具有不同模板参数的都是不同的类型,因此 的复制构造函数X<A,B>不会匹配X<B,A>

演示:http: //ideone.com/V6g35

于 2012-01-07T14:07:13.550 回答