(Простые) конструкторы в классах вариационных шаблонов - PullRequest
1 голос
/ 07 января 2012

Как бы конструктор и конструктор копирования выглядел для этого вариационного шаблона?

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 Ответ

1 голос
/ 07 января 2012
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...