2015-06-11 18 views
6

क्यों एक विशिष्ट प्रकार टेम्पलेट पैक में कोई विशिष्ट प्रकार की अनुमति नहीं है?एक विशिष्ट प्रकार के वैराडिक टेम्पलेट पैरामीटर

template< typename T > 
class Foo 
{ 
public: 
    template< typename... Values > 
    void bar(Values... values) 
    { 
    } 

    template< T... values >   <-- syntax error 
    void bar(T... values) 
    { 
    } 

    template< int... values >   <-- syntax error 
    void bar(int... values) 
    { 
    } 
}; 

क्या नहीं में तर्क यह अनुमति देता है?
क्या इसके लिए प्रस्ताव हैं?


नोट: see here : विकल्प

  • std::initializer_list<T> प्रकार के संकुचन और { } -brace-वाक्य रचना
  • एक (बदसूरत) पुनरावर्ती ऐसी विशेषता है जो सभी प्रकार के अलग से जाँच करता है बिना होगा

उत्तर

6

यह अनुमति है, असल में, आप बस इसे गलत इस्तेमाल कर रहे हैं। T... और int... गैर-प्रकार पैरामीटर पैक हैं और उनके तत्व मान हैं, इसलिए आप उन्हें टाइप विनिर्देशकों के रूप में उपयोग नहीं कर सकते हैं (और आप उन्हें फ़ंक्शन कॉल से नहीं निकाल सकते हैं)।

सही उपयोग का एक उदाहरण:

template<int... Is> 
struct IntPack {}; 

IntPack<1,2,3> p; 

या

template< typename T > 
struct Foo 
{ 
    template< T... Ts> 
    void bar() 
    { 
    } 
}; 

int main() 
{ 
    Foo<int> f; 
    f.bar<1,2,3>(); 
} 

एक और उदाहरण std::integer_sequence होगा।

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