构造函数和复制构造函数如何查找此可变参数模板类?
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;
}
答案 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>
。