gnuyuva schrieb:
> use recursive templates.
>
> enum { multiplier = 10 };
>
> template <unsigned int index> struct value
> {
> static const long long int this_value = value< index-1>::this_value
> * multiplier;
> }
>
> template <> struct value<0> { enum { this_value = 1 }; } //
> termination condition.
>
> since the depth of template recursion is limited (say 17 is the upper
> limit)
> template <> struct value<17> {}; // let there be compilation error.
Thanks, but this is not what I was looking for.
I should have been more precise: I want to be able to define any arbitrary
indexed sequence of constant values, as long as the values are increasing.
Thus, this could be another example:
// definition of the index - value pairs
template<unsigned int index> struct Value {};
template<> struct Value<0> {static const unsigned int value = 27;};
template<> struct Value<1> {static const unsigned int value = 33;};
template<> struct Value<2> {static const unsigned int value = 815;};
template<> struct Value<3> {static const unsigned int value = 4711;};
Again, writing this with an array would be quite convenient:
const unsigned int a[] = {27, 33, 815, 4711};
but the array elements are obviously not allowed to be used in a constant
expression.
Sorry for making this not clear enough.


|