可变参数模板类中的(简单)构造函数

时间:2012-01-07 13:45:37

标签: c++ syntax c++11 variadic-templates

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

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;
}

1 个答案:

答案 0 :(得分: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>的复制构造函数赢了“ t匹配X<B,A>

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