2015-06-11 21 views
6

Variadic şablon paketinde neden belirli türde izin var?Belirli bir türde Variadic şablon parametreleri

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) 
    { 
    } 
}; 

nedir bu izin değil yılında mantığı?
Bunun için öneriler var mı?


Not: see here : alternatifler türleri daralması ve { } -brace-sözdizimi

  • ayrı her tür kontrol eden bir (çirkin) yinelemeli özelliği olmayan

    • std::initializer_list<T> olur
  • cevap

    6

    İzin verilir, aslında yanlış kullanıyorsunuz. T... ve int..., non-type parametre paketleridir ve bunların öğeleri değerlerdir, bu nedenle bunları tür belirticiler olarak kullanamazsınız (ve bunları bir işlev çağrısından çıkaramazsınız).

    doğru kullanım örneği:

    template<int... Is> 
    struct IntPack {}; 
    
    IntPack<1,2,3> p; 
    

    veya

    template< typename T > 
    struct Foo 
    { 
        template< T... Ts> 
        void bar() 
        { 
        } 
    }; 
    
    int main() 
    { 
        Foo<int> f; 
        f.bar<1,2,3>(); 
    } 
    

    Başka bir örnek std::integer_sequence olacaktır.

    İlgili konular