2012-01-07 6 views
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; 
} 
+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; 
}; 

、タイプとしてXX<Head, Tail...>を意味し、別のテンプレートパラメータを持つすべてのXは別個のタイプなので、X<A,B>のコピーコンストラクタがX<B,A>とは一致しません。

デモ:http://ideone.com/V6g35

関連する問題