On May 9, 6:06 pm, Christof Warlich <cwarl...@[EMAIL PROTECTED]
>
wrote:
> 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.
Well, in that case you don't have any other go but to write them
manually. Maybe you can reduce your typing effort by writing a macro.
or wait till c++0x for 'constexpr' ;-)


|