|
Boost Users : |
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-01-28 16:39:09
AMDG
Hicham Mouline wrote:
> After some though, here is more precisely what I'd like to have...
> I apologize that it is quite different from the initial problem:
>
> template<int n> class Tree {
> static double sum(); //
> };
>
>
> If the user instantiates tree<2>, he should get:
>
> template<> class Tree<2> {
> static double sum(double d1, double d2);
> };
>
> template<> class Tree<3> {
> static double sum(double d1, double d2, double d3);
> };
> etc etc...
>
>
> so that in user code, for e.g.:
>
> double d= Tree<4>::sum(d1, d2, d3, d4);
>
> should compile.
>
>
> Is it possible for me to just define the template Tree for the n-case
> without the 2- and 3- specializations?
>
Ah. You still need the preprocessor, but you can rearrange the
definitions slightly.
(untested)
template<int N>
struct TreeSumImpl;
#define TREE_SUM_DEF(z, n, data)\
template<>\
struct TreeSumImpl<n> {\
static double sum(BOOST_PP_ENUM_PARAMS_Z(z, n, double arg)) { ... }\
};
BOOST_PP_REPEAT(20, TREE_SUM_DEF, ~)
template<int N>
struct Tree : TreeSumImpl<N> {
// other code
};
In Christ,
Steven Watanabe
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net