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;
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
|
show 1 more comment
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
6
What you want isstd::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
|
show 1 more comment
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
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
c++ variadic-templates
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 isstd::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
|
show 1 more comment
6
What you want isstd::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
|
show 1 more comment
2 Answers
2
active
oldest
votes
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>
So themake_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
intoint...
.
– Evg
May 24 at 8:28
add a comment |
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, "");
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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>
So themake_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
intoint...
.
– Evg
May 24 at 8:28
add a comment |
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>
So themake_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
intoint...
.
– Evg
May 24 at 8:28
add a comment |
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>
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>
answered May 24 at 7:57
EvgEvg
4,99821739
4,99821739
So themake_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
intoint...
.
– Evg
May 24 at 8:28
add a comment |
So themake_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
intoint...
.
– 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
add a comment |
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, "");
add a comment |
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, "");
add a comment |
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, "");
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, "");
answered May 24 at 7:59
Dmitry GordonDmitry Gordon
1,754616
1,754616
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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