2016-10-23 31 views
6

हम टेम्पलेट वर्ग है:खाका पैरामीटर पैक विशेषता

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

लेकिन यह कैसे टेम्पलेट वर्गों के पैकर घोषित करने के लिए:

template<int... is> 
Pack 
{ 

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

या howto कक्षाएं एक का संग्रह है?

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

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

:

उत्तर

9

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

एक और तरीका है std::tuple का प्रयोग, उदाहरण के द्वारा विरासत के माध्यम से किया जा सकता है

template <int i> 
class A 
{ }; 

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

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

सबसे अच्छा तरीका मैं जानता हूँ कि एक प्रकार सूची उपयोग करने के लिए है प्रकार सूची के साथ, यह करने के लिए वास्तव में आसान है nsformation या प्रत्येक सदस्यों पर संचालन करें। पिछले कोड के साथ वेक्टर: उदाहरण के लिए: के एसटीडी की एक TYPE_LIST बना सकते हैं

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; 

उनके प्रकार सूचियों के बारे में दस्तावेज़ का एक बहुत है। यह मेटा-प्रोग्रामर के के मूल उपकरण में से एक है क्योंकि यह पुस्तक: आधुनिक सी ++ डिज़ाइन (जो प्री-सी ++ 11 का उपयोग करता है)। सी ++ 11 के साथ, इसका उपयोग करना भी आसान है।

संबंधित मुद्दे