2016-10-23 35 views
6

Biz şablon sınıf var:Şablon parametre paketi niteliği

template<int i> 
class A 
{ 
... 
}; 

Ama nasıl şablon sınıflarının balyalayıcıyı ilan etmek:

template<int... is> 
Pack 
{ 

private: 
    A<is...> attrs; 
}; 

Ya howto sınıfları A koleksiyonuna sahip?

template<class...> struct type_list{}; 

template<int...Is> 
using a_pack = type_list<A<Is>...>; 

:

cevap

9

miras yoluyla olabilir örnekle,

#include <tuple> 

template <int i> 
class A 
{ }; 

template <int... is> 
class Pack 
{ std::tuple<A<is>...> attrs; }; 

int main() 
{ 
    Pack<2,3,5,7,11,13> p; 
} 

başka yolu std::tuple kullanma

template <int i> 
class A 
{ }; 

template <int... is> 
class Pack : A<is>... 
{ }; 

int main() 
{ 
    Pack<2,3,5,7,11,13> p; 
} 
3

bildiğim en iyi yaklaşım Tür listesini kullanmaktır Tür listesi ile, tra gerçekleştirmek gerçekten kolay nsformation veya , her üye üzerinde işlem yapar. vektör önceki kodla: Örneğin: en std bir TYPE_LIST yapalım tip listeleri hakkındaki belgelerin bir sürü Onların

template<class> struct vectors_of; 

template<class...As> struct vectors_of<type_list<As...>>{ 
    using type=type_list<std::vector<As>...>; 
}; 
using vectors_of_a = typename vectors_of<a_pack<1,2>>::type; 

. Bu, bu kitaptan beri meta programcıların temel araçları olan 'lardan biridir: Modern C++ Tasarım (önceden-++ ++ kullanan). C++ 11 ile kullanmak daha da kolay.