Variadic template parameters from integerUse 'class' or 'typename' for template parameters?Returning multiple values from a C++ functionWhy can templates only be implemented in the header file?Partial specialization of variadic templatesWhy is reading lines from stdin much slower in C++ than Python?Partial specialization of class template for a type that appears in any position of a variadic template parameter packVariadic template class argument containers instantiationReplacing a 32-bit loop counter with 64-bit introduces crazy performance deviationsVariadic Template simulating “runtime” expansionC++ Variadic template method specialization

What does 思ってやっている mean?

Who won a Game of Bar Dice?

Is it possible to have 2 different but equal size real number sets that have the same mean and standard deviation?

Printing Pascal’s triangle for n number of rows in Python

Why did Intel abandon unified CPU cache?

Fermat's statement about the ancients: How serious was he?

Can a human be transformed into a Mind Flayer?

Should I put programming books I wrote a few years ago on my resume?

Is this a bug in plotting step functions?

A word that means "blending into a community too much"

Increase speed altering column on large table to NON NULL

Does putting salt first make it easier for attacker to bruteforce the hash?

Why does this query, missing a FROM clause, not error out?

Why am I Seeing A Weird "Notch" on the Data Line For Some Logical 1s?

Is it fine to get '204 No Content' in PATCH method

Are there any normal animals in Pokemon universe?

Can the removal of a duty-free sales trolley result in a measurable reduction in emissions?

What is the meaning of the Russian idiom "to taste tuna" ("отведать тунца")?

Bb13b9 confusion

Separate SPI data

What should I write in an apology letter, since I have decided not to join a company after accepting an offer letter

How to make insert mode mapping count as multiple undos?

Electricity free spaceship

The Frozen Wastes



Variadic template parameters from integer


Use 'class' or 'typename' for template parameters?Returning multiple values from a C++ functionWhy can templates only be implemented in the header file?Partial specialization of variadic templatesWhy is reading lines from stdin much slower in C++ than Python?Partial specialization of class template for a type that appears in any position of a variadic template parameter packVariadic template class argument containers instantiationReplacing a 32-bit loop counter with 64-bit introduces crazy performance deviationsVariadic Template simulating “runtime” expansionC++ Variadic template method specialization






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








9















Given I have that type



template<int ...Is>
struct A ;


Can I "generate" the type A<0, 1, 2, 3, 4, 5,..., d> just from an integer d?



I thought about something like



template<int d>
struct B : A<std::index_sequence<d>...>


but it doesn't work.



Other option is to specialize manually:



template<int d>
struct B;

template<>
struct B<0>: A<> ;

template<>
struct B<1>: A<0> ;

template<>
struct B<2>: A<0, 1> ;

template<>
struct B<3>: A<0, 1, 2> ;


but obviously I don't be able to write B<3000> b;



[edit] my actual use-case is a "bit" more complex than that. I don't want to reimplement std::integer_sequence, but something more complex.










share|improve this question



















  • 6





    What you want is std::make_integer_sequence.

    – Evg
    May 24 at 7:49











  • @Evg can you elaborate please?

    – Regis Portalez
    May 24 at 7:53






  • 2





    Your compiler will probably bail out at 3000 template parameters.

    – n.m.
    May 24 at 7:56











  • @n.m. If I'm right, there is a compiler setting for that :)

    – Regis Portalez
    May 24 at 7:56











  • As a stupid lowly Python programmer - why would one ever want to do this?

    – Adam Barnes
    May 24 at 19:36

















9















Given I have that type



template<int ...Is>
struct A ;


Can I "generate" the type A<0, 1, 2, 3, 4, 5,..., d> just from an integer d?



I thought about something like



template<int d>
struct B : A<std::index_sequence<d>...>


but it doesn't work.



Other option is to specialize manually:



template<int d>
struct B;

template<>
struct B<0>: A<> ;

template<>
struct B<1>: A<0> ;

template<>
struct B<2>: A<0, 1> ;

template<>
struct B<3>: A<0, 1, 2> ;


but obviously I don't be able to write B<3000> b;



[edit] my actual use-case is a "bit" more complex than that. I don't want to reimplement std::integer_sequence, but something more complex.










share|improve this question



















  • 6





    What you want is std::make_integer_sequence.

    – Evg
    May 24 at 7:49











  • @Evg can you elaborate please?

    – Regis Portalez
    May 24 at 7:53






  • 2





    Your compiler will probably bail out at 3000 template parameters.

    – n.m.
    May 24 at 7:56











  • @n.m. If I'm right, there is a compiler setting for that :)

    – Regis Portalez
    May 24 at 7:56











  • As a stupid lowly Python programmer - why would one ever want to do this?

    – Adam Barnes
    May 24 at 19:36













9












9








9


3






Given I have that type



template<int ...Is>
struct A ;


Can I "generate" the type A<0, 1, 2, 3, 4, 5,..., d> just from an integer d?



I thought about something like



template<int d>
struct B : A<std::index_sequence<d>...>


but it doesn't work.



Other option is to specialize manually:



template<int d>
struct B;

template<>
struct B<0>: A<> ;

template<>
struct B<1>: A<0> ;

template<>
struct B<2>: A<0, 1> ;

template<>
struct B<3>: A<0, 1, 2> ;


but obviously I don't be able to write B<3000> b;



[edit] my actual use-case is a "bit" more complex than that. I don't want to reimplement std::integer_sequence, but something more complex.










share|improve this question
















Given I have that type



template<int ...Is>
struct A ;


Can I "generate" the type A<0, 1, 2, 3, 4, 5,..., d> just from an integer d?



I thought about something like



template<int d>
struct B : A<std::index_sequence<d>...>


but it doesn't work.



Other option is to specialize manually:



template<int d>
struct B;

template<>
struct B<0>: A<> ;

template<>
struct B<1>: A<0> ;

template<>
struct B<2>: A<0, 1> ;

template<>
struct B<3>: A<0, 1, 2> ;


but obviously I don't be able to write B<3000> b;



[edit] my actual use-case is a "bit" more complex than that. I don't want to reimplement std::integer_sequence, but something more complex.







c++ variadic-templates






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 24 at 8:00







Regis Portalez

















asked May 24 at 7:46









Regis PortalezRegis Portalez

3,20912033




3,20912033







  • 6





    What you want is std::make_integer_sequence.

    – Evg
    May 24 at 7:49











  • @Evg can you elaborate please?

    – Regis Portalez
    May 24 at 7:53






  • 2





    Your compiler will probably bail out at 3000 template parameters.

    – n.m.
    May 24 at 7:56











  • @n.m. If I'm right, there is a compiler setting for that :)

    – Regis Portalez
    May 24 at 7:56











  • As a stupid lowly Python programmer - why would one ever want to do this?

    – Adam Barnes
    May 24 at 19:36












  • 6





    What you want is std::make_integer_sequence.

    – Evg
    May 24 at 7:49











  • @Evg can you elaborate please?

    – Regis Portalez
    May 24 at 7:53






  • 2





    Your compiler will probably bail out at 3000 template parameters.

    – n.m.
    May 24 at 7:56











  • @n.m. If I'm right, there is a compiler setting for that :)

    – Regis Portalez
    May 24 at 7:56











  • As a stupid lowly Python programmer - why would one ever want to do this?

    – Adam Barnes
    May 24 at 19:36







6




6





What you want is std::make_integer_sequence.

– Evg
May 24 at 7:49





What you want is std::make_integer_sequence.

– Evg
May 24 at 7:49













@Evg can you elaborate please?

– Regis Portalez
May 24 at 7:53





@Evg can you elaborate please?

– Regis Portalez
May 24 at 7:53




2




2





Your compiler will probably bail out at 3000 template parameters.

– n.m.
May 24 at 7:56





Your compiler will probably bail out at 3000 template parameters.

– n.m.
May 24 at 7:56













@n.m. If I'm right, there is a compiler setting for that :)

– Regis Portalez
May 24 at 7:56





@n.m. If I'm right, there is a compiler setting for that :)

– Regis Portalez
May 24 at 7:56













As a stupid lowly Python programmer - why would one ever want to do this?

– Adam Barnes
May 24 at 19:36





As a stupid lowly Python programmer - why would one ever want to do this?

– Adam Barnes
May 24 at 19:36












2 Answers
2






active

oldest

votes


















15














We already have what you want in the Standard library - std::make_integer_sequence. If you want to use your own type A<...> you can do this:



template<int... Is>
struct A ;

template<class>
struct make_A_impl;

template<int... Is>
struct make_A_impl<std::integer_sequence<int, Is...>>
using Type = A<Is...>;
;

template<int size>
using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;


And then for A<0, ..., 2999> write



make_A<3000>





share|improve this answer























  • So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

    – Stack Danny
    May 24 at 8:12











  • @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

    – Evg
    May 24 at 8:28


















4














A bit another way to do - use function signature to match the A<...> type:



#include <type_traits>

template<int ...Is>
struct A ;

namespace details

template <int ...Is>
auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;


template<int I>
using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));

static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56288041%2fvariadic-template-parameters-from-integer%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    15














    We already have what you want in the Standard library - std::make_integer_sequence. If you want to use your own type A<...> you can do this:



    template<int... Is>
    struct A ;

    template<class>
    struct make_A_impl;

    template<int... Is>
    struct make_A_impl<std::integer_sequence<int, Is...>>
    using Type = A<Is...>;
    ;

    template<int size>
    using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;


    And then for A<0, ..., 2999> write



    make_A<3000>





    share|improve this answer























    • So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

      – Stack Danny
      May 24 at 8:12











    • @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

      – Evg
      May 24 at 8:28















    15














    We already have what you want in the Standard library - std::make_integer_sequence. If you want to use your own type A<...> you can do this:



    template<int... Is>
    struct A ;

    template<class>
    struct make_A_impl;

    template<int... Is>
    struct make_A_impl<std::integer_sequence<int, Is...>>
    using Type = A<Is...>;
    ;

    template<int size>
    using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;


    And then for A<0, ..., 2999> write



    make_A<3000>





    share|improve this answer























    • So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

      – Stack Danny
      May 24 at 8:12











    • @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

      – Evg
      May 24 at 8:28













    15












    15








    15







    We already have what you want in the Standard library - std::make_integer_sequence. If you want to use your own type A<...> you can do this:



    template<int... Is>
    struct A ;

    template<class>
    struct make_A_impl;

    template<int... Is>
    struct make_A_impl<std::integer_sequence<int, Is...>>
    using Type = A<Is...>;
    ;

    template<int size>
    using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;


    And then for A<0, ..., 2999> write



    make_A<3000>





    share|improve this answer













    We already have what you want in the Standard library - std::make_integer_sequence. If you want to use your own type A<...> you can do this:



    template<int... Is>
    struct A ;

    template<class>
    struct make_A_impl;

    template<int... Is>
    struct make_A_impl<std::integer_sequence<int, Is...>>
    using Type = A<Is...>;
    ;

    template<int size>
    using make_A = typename make_A_impl<std::make_integer_sequence<int, size>>::Type;


    And then for A<0, ..., 2999> write



    make_A<3000>






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered May 24 at 7:57









    EvgEvg

    4,99821739




    4,99821739












    • So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

      – Stack Danny
      May 24 at 8:12











    • @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

      – Evg
      May 24 at 8:28

















    • So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

      – Stack Danny
      May 24 at 8:12











    • @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

      – Evg
      May 24 at 8:28
















    So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

    – Stack Danny
    May 24 at 8:12





    So the make_A_impl declaration is needed to workaround the fact that you can't have two parameter packs in one template argument list?

    – Stack Danny
    May 24 at 8:12













    @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

    – Evg
    May 24 at 8:28





    @StackDanny, I didn't fully get your question. make_A_impl is used to "unpack" std::integer_sequence into int....

    – Evg
    May 24 at 8:28













    4














    A bit another way to do - use function signature to match the A<...> type:



    #include <type_traits>

    template<int ...Is>
    struct A ;

    namespace details

    template <int ...Is>
    auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;


    template<int I>
    using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));

    static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");





    share|improve this answer



























      4














      A bit another way to do - use function signature to match the A<...> type:



      #include <type_traits>

      template<int ...Is>
      struct A ;

      namespace details

      template <int ...Is>
      auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;


      template<int I>
      using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));

      static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");





      share|improve this answer

























        4












        4








        4







        A bit another way to do - use function signature to match the A<...> type:



        #include <type_traits>

        template<int ...Is>
        struct A ;

        namespace details

        template <int ...Is>
        auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;


        template<int I>
        using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));

        static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");





        share|improve this answer













        A bit another way to do - use function signature to match the A<...> type:



        #include <type_traits>

        template<int ...Is>
        struct A ;

        namespace details

        template <int ...Is>
        auto GenrateAHelper(std::integer_sequence<int, Is...>) -> A<Is...>;


        template<int I>
        using GenerateA = decltype(details::GenrateAHelper(std::make_integer_sequence<int, I>()));

        static_assert(std::is_same<GenerateA<3>, A<0, 1, 2>>::value, "");






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered May 24 at 7:59









        Dmitry GordonDmitry Gordon

        1,754616




        1,754616



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56288041%2fvariadic-template-parameters-from-integer%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

            Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

            Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020